1*082815dcSEvan Baconimport { 2*082815dcSEvan Bacon appendScheme, 3*082815dcSEvan Bacon getScheme, 4*082815dcSEvan Bacon getSchemesFromPlist, 5*082815dcSEvan Bacon hasScheme, 6*082815dcSEvan Bacon removeScheme, 7*082815dcSEvan Bacon setScheme, 8*082815dcSEvan Bacon} from '../Scheme'; 9*082815dcSEvan Bacon 10*082815dcSEvan Bacondescribe('scheme', () => { 11*082815dcSEvan Bacon it(`returns empty array if no scheme is provided`, () => { 12*082815dcSEvan Bacon expect(getScheme({})).toStrictEqual([]); 13*082815dcSEvan Bacon }); 14*082815dcSEvan Bacon 15*082815dcSEvan Bacon it(`returns the scheme if provided`, () => { 16*082815dcSEvan Bacon expect(getScheme({ scheme: 'myapp' })).toStrictEqual(['myapp']); 17*082815dcSEvan Bacon expect( 18*082815dcSEvan Bacon getScheme({ 19*082815dcSEvan Bacon scheme: ['myapp', 'other', null], 20*082815dcSEvan Bacon }) 21*082815dcSEvan Bacon ).toStrictEqual(['myapp', 'other']); 22*082815dcSEvan Bacon }); 23*082815dcSEvan Bacon 24*082815dcSEvan Bacon it(`sets the CFBundleUrlTypes if scheme is given`, () => { 25*082815dcSEvan Bacon expect( 26*082815dcSEvan Bacon setScheme( 27*082815dcSEvan Bacon { 28*082815dcSEvan Bacon // @ts-ignore: TODO -- add this to the ExpoConfig type 29*082815dcSEvan Bacon scheme: ['myapp', 'more'], 30*082815dcSEvan Bacon ios: { 31*082815dcSEvan Bacon // @ts-ignore: TODO -- add this to the ExpoConfig type 32*082815dcSEvan Bacon scheme: ['ios-only'], 33*082815dcSEvan Bacon bundleIdentifier: 'com.demo.value', 34*082815dcSEvan Bacon }, 35*082815dcSEvan Bacon }, 36*082815dcSEvan Bacon {} 37*082815dcSEvan Bacon ) 38*082815dcSEvan Bacon ).toMatchObject({ 39*082815dcSEvan Bacon CFBundleURLTypes: [{ CFBundleURLSchemes: ['myapp', 'more', 'ios-only', 'com.demo.value'] }], 40*082815dcSEvan Bacon }); 41*082815dcSEvan Bacon }); 42*082815dcSEvan Bacon 43*082815dcSEvan Bacon it(`makes no changes to the infoPlist no scheme is provided`, () => { 44*082815dcSEvan Bacon expect(setScheme({}, {})).toMatchObject({}); 45*082815dcSEvan Bacon }); 46*082815dcSEvan Bacon 47*082815dcSEvan Bacon it(`verifies that a scheme exists`, () => { 48*082815dcSEvan Bacon const infoPlist = { 49*082815dcSEvan Bacon CFBundleURLTypes: [{ CFBundleURLSchemes: ['myapp'] }], 50*082815dcSEvan Bacon }; 51*082815dcSEvan Bacon expect(hasScheme('myapp', infoPlist)).toBe(true); 52*082815dcSEvan Bacon expect(hasScheme('myapp2', infoPlist)).toBe(false); 53*082815dcSEvan Bacon }); 54*082815dcSEvan Bacon 55*082815dcSEvan Bacon it(`lists all of the schemes`, () => { 56*082815dcSEvan Bacon const infoPlist = { 57*082815dcSEvan Bacon CFBundleURLTypes: [ 58*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp1', 'myapp2'] }, 59*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp3'] }, 60*082815dcSEvan Bacon ], 61*082815dcSEvan Bacon }; 62*082815dcSEvan Bacon expect(getSchemesFromPlist(infoPlist).length).toBe(3); 63*082815dcSEvan Bacon }); 64*082815dcSEvan Bacon 65*082815dcSEvan Bacon it(`append a scheme`, () => { 66*082815dcSEvan Bacon const infoPlist = { 67*082815dcSEvan Bacon CFBundleURLTypes: [ 68*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp1', 'myapp2'] }, 69*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp3'] }, 70*082815dcSEvan Bacon ], 71*082815dcSEvan Bacon }; 72*082815dcSEvan Bacon expect(appendScheme('myapp3', infoPlist)).toStrictEqual({ 73*082815dcSEvan Bacon CFBundleURLTypes: [ 74*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp1', 'myapp2'] }, 75*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp3'] }, 76*082815dcSEvan Bacon ], 77*082815dcSEvan Bacon }); 78*082815dcSEvan Bacon expect(appendScheme('myapp4', infoPlist)).toStrictEqual({ 79*082815dcSEvan Bacon CFBundleURLTypes: [ 80*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp1', 'myapp2'] }, 81*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp3'] }, 82*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp4'] }, 83*082815dcSEvan Bacon ], 84*082815dcSEvan Bacon }); 85*082815dcSEvan Bacon }); 86*082815dcSEvan Bacon 87*082815dcSEvan Bacon it(`removes a scheme`, () => { 88*082815dcSEvan Bacon const infoPlist = { 89*082815dcSEvan Bacon CFBundleURLTypes: [ 90*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp1', 'myapp2'] }, 91*082815dcSEvan Bacon { CFBundleURLSchemes: ['myapp3'] }, 92*082815dcSEvan Bacon ], 93*082815dcSEvan Bacon }; 94*082815dcSEvan Bacon expect(removeScheme('myapp3', infoPlist)).toStrictEqual({ 95*082815dcSEvan Bacon CFBundleURLTypes: [{ CFBundleURLSchemes: ['myapp1', 'myapp2'] }], 96*082815dcSEvan Bacon }); 97*082815dcSEvan Bacon }); 98*082815dcSEvan Bacon}); 99