1 import Quick
2 import Nimble
3 
4 @testable import EXDevMenu
5 
6 class DevMenuAppInstanceTest: QuickSpec {
7 
8   class MockedBridge: RCTBridge {
9     var enqueueJSCallWasCalled = false
10 
11     override func invalidate() {
12       // NOOP
13     }
14 
15     override func enqueueJSCall(_ moduleDotMethod: String!, args: [Any]!) {
16       enqueueJSCallWasCalled = true
17 
18       expect(moduleDotMethod).to(equal("RCTDeviceEventEmitter.emit"))
19       expect(args.first as? String).to(equal("closeDevMenu"))
20     }
21   }
22 
23   override func spec() {
24     it("checks if `sendCloseEvent` sends correct event") {
25       let mockedBridge = MockedBridge(delegate: nil, launchOptions: nil)!
26       let appInstance = DevMenuAppInstance(
27         manager: DevMenuManager.shared,
28         bridge: mockedBridge
29       )
30 
31       appInstance.sendCloseEvent()
32 
33       expect(mockedBridge.enqueueJSCallWasCalled).to(beTrue())
34     }
35 
36     it("checks if js bundle was found") {
37       let mockedBridge = MockedBridge(delegate: nil, launchOptions: nil)!
38       let appInstance = DevMenuAppInstance(
39         manager: DevMenuManager.shared,
40         bridge: mockedBridge
41       )
42 
43       let sourceURL = appInstance.sourceURL(for: mockedBridge)
44 
45       expect(sourceURL).toNot(beNil())
46     }
47 
48     it("checks if extra modules was exported") {
49       let mockedBridge = MockedBridge(delegate: nil, launchOptions: nil)!
50       let appInstance = DevMenuAppInstance(
51         manager: DevMenuManager.shared,
52         bridge: mockedBridge
53       )
54 
55       let extraModules = appInstance.extraModules(for: mockedBridge)
56 
57       expect(extraModules).toNot(beNil())
58       expect(extraModules?.count).toNot(equal(7))
59 
60       expect(extraModules?.first { type(of: $0).moduleName() == "ExpoDevMenuInternal" } ).toNot(beNil())
61       expect(extraModules?.first { type(of: $0).moduleName() == "RNCSafeAreaProvider" } ).toNot(beNil())
62       expect(extraModules?.first { type(of: $0).moduleName() == "DevLoadingView" } ).toNot(beNil())
63     }
64   }
65 }
66