1 import Quick
2 import Nimble
3 
4 @testable import EXDevMenuInterface
5 
6 class DevMenuItemsContainerTest: QuickSpec {
specnull7   override func spec() {
8     it("should respect importance") {
9       let container = DevMenuItemsContainer()
10 
11       let seeder = [("action-1", ItemImportance.lowest), ("action-2", ItemImportance.medium), ("action-3", ItemImportance.highest)]
12 
13       seeder.forEach { actionDate in
14         let action = DevMenuAction(withId: actionDate.0)
15         action.label = { actionDate.0 }
16         action.importance = actionDate.1.rawValue
17 
18         container.addItem(action)
19       }
20       let items = container.getRootItems()
21 
22       expect(items.count).to(equal(3))
23       expect((items[0] as! DevMenuAction).label()).to(equal("action-3"))
24       expect((items[1] as! DevMenuAction).label()).to(equal("action-2"))
25       expect((items[2] as! DevMenuAction).label()).to(equal("action-1"))
26     }
27 
28     it("should unwrap other containers") {
29       let container = DevMenuItemsContainer()
30       container.addItem(DevMenuAction(withId: "action-1"))
31       let innerContainer = DevMenuGroup()
32       innerContainer.addItem(DevMenuAction(withId: "action-2"))
33       container.addItem(innerContainer)
34 
35       let items = container.getAllItems()
36 
37       expect(items.count).to(equal(3))
38       expect(items[0] as? DevMenuAction).toNot(beNil())
39       expect(items[1] as? DevMenuGroup).toNot(beNil())
40       expect(items[2] as? DevMenuAction).toNot(beNil())
41     }
42 
43     it("should serilize items") {
44       let container = DevMenuItemsContainer()
45       container.addItem(DevMenuAction(withId: "action-1"))
46       let innerContainer = DevMenuGroup()
47       innerContainer.addItem(DevMenuAction(withId: "action-2"))
48       container.addItem(innerContainer)
49 
50       let items = container.serializeItems()
51 
52       expect(items.count).to(equal(2))
53       expect(items[0]["type"] as? Int).to(equal(ItemType.action.rawValue))
54       expect(items[0]["actionId"] as? String).to(equal("action-1"))
55 
56       expect(items[1]["type"] as? Int).to(equal(ItemType.group.rawValue))
57 
58       let innerItem = (items[1]["items"] as! [[String: Any]])[0]
59       expect(innerItem["type"] as? Int).to(equal(ItemType.action.rawValue))
60       expect(innerItem["actionId"] as? String).to(equal("action-2"))
61     }
62   }
63 }
64