1082815dcSEvan Baconimport fs from 'fs';
2082815dcSEvan Baconimport { vol } from 'memfs';
3082815dcSEvan Baconimport path from 'path';
4082815dcSEvan Bacon
5*ed3bd27bSEvan Baconimport rnFixture from '../../plugins/__tests__/fixtures/react-native-project';
6082815dcSEvan Baconimport { setProvisioningProfileForPbxproj } from '../ProvisioningProfile';
7082815dcSEvan Bacon
8082815dcSEvan Baconjest.mock('fs');
9082815dcSEvan Bacon
10082815dcSEvan Baconconst originalFs = jest.requireActual('fs') as typeof import('fs');
11082815dcSEvan Bacon
12082815dcSEvan Bacondescribe('ProvisioningProfile module', () => {
13082815dcSEvan Bacon  describe(setProvisioningProfileForPbxproj, () => {
14082815dcSEvan Bacon    const projectRoot = '/testproject';
15082815dcSEvan Bacon    const pbxProjPath = 'ios/testproject.xcodeproj/project.pbxproj';
16082815dcSEvan Bacon
17082815dcSEvan Bacon    afterEach(() => {
18082815dcSEvan Bacon      vol.reset();
19082815dcSEvan Bacon    });
20082815dcSEvan Bacon
21082815dcSEvan Bacon    describe('multitarget', () => {
22082815dcSEvan Bacon      it('configures the project.pbxproj file for multitarget projects', () => {
23082815dcSEvan Bacon        vol.fromJSON(
24082815dcSEvan Bacon          {
25082815dcSEvan Bacon            [pbxProjPath]: originalFs.readFileSync(
26082815dcSEvan Bacon              path.join(__dirname, 'fixtures/project-multitarget.pbxproj'),
27082815dcSEvan Bacon              'utf-8'
28082815dcSEvan Bacon            ),
29082815dcSEvan Bacon          },
30082815dcSEvan Bacon          projectRoot
31082815dcSEvan Bacon        );
32082815dcSEvan Bacon        setProvisioningProfileForPbxproj(projectRoot, {
33082815dcSEvan Bacon          targetName: 'multitarget',
34082815dcSEvan Bacon          profileName: '*[expo] com.swmansion.dominik.abcd.v2 AppStore 2020-07-24T07:56:22.983Z',
35082815dcSEvan Bacon          appleTeamId: 'J5FM626PE2',
36082815dcSEvan Bacon        });
37082815dcSEvan Bacon        const pbxprojContents = fs.readFileSync(path.join(projectRoot, pbxProjPath), 'utf-8');
38082815dcSEvan Bacon        expect(pbxprojContents).toMatchSnapshot();
39082815dcSEvan Bacon      });
40082815dcSEvan Bacon
41082815dcSEvan Bacon      it('configures the project.pbxproj file for multitarget projects without existing target attributes', () => {
42082815dcSEvan Bacon        vol.fromJSON(
43082815dcSEvan Bacon          {
44082815dcSEvan Bacon            [pbxProjPath]: originalFs.readFileSync(
45082815dcSEvan Bacon              path.join(__dirname, 'fixtures/project-multitarget-missing-targetattributes.pbxproj'),
46082815dcSEvan Bacon              'utf-8'
47082815dcSEvan Bacon            ),
48082815dcSEvan Bacon          },
49082815dcSEvan Bacon          projectRoot
50082815dcSEvan Bacon        );
51082815dcSEvan Bacon        setProvisioningProfileForPbxproj(projectRoot, {
52082815dcSEvan Bacon          targetName: 'multitarget',
53082815dcSEvan Bacon          profileName: '*[expo] com.swmansion.dominik.abcd.v2 AppStore 2020-07-24T07:56:22.983Z',
54082815dcSEvan Bacon          appleTeamId: 'J5FM626PE2',
55082815dcSEvan Bacon        });
56082815dcSEvan Bacon        const pbxprojContents = fs.readFileSync(path.join(projectRoot, pbxProjPath), 'utf-8');
57082815dcSEvan Bacon        expect(pbxprojContents).toMatchSnapshot();
58082815dcSEvan Bacon      });
59082815dcSEvan Bacon    });
60082815dcSEvan Bacon
61082815dcSEvan Bacon    describe('single target', () => {
62082815dcSEvan Bacon      beforeEach(() => {
63082815dcSEvan Bacon        vol.fromJSON(
64082815dcSEvan Bacon          {
65*ed3bd27bSEvan Bacon            [pbxProjPath]: rnFixture['ios/HelloWorld.xcodeproj/project.pbxproj'],
66082815dcSEvan Bacon          },
67082815dcSEvan Bacon          projectRoot
68082815dcSEvan Bacon        );
69082815dcSEvan Bacon      });
70082815dcSEvan Bacon
71082815dcSEvan Bacon      it('configures the project.pbxproj file with the profile name and apple team id', () => {
72082815dcSEvan Bacon        setProvisioningProfileForPbxproj(projectRoot, {
73082815dcSEvan Bacon          profileName: '*[expo] com.swmansion.dominik.abcd.v2 AppStore 2020-07-24T07:56:22.983Z',
74082815dcSEvan Bacon          appleTeamId: 'J5FM626PE2',
75082815dcSEvan Bacon        });
76082815dcSEvan Bacon        const pbxprojContents = fs.readFileSync(path.join(projectRoot, pbxProjPath), 'utf-8');
77082815dcSEvan Bacon        expect(pbxprojContents).toMatchSnapshot();
78082815dcSEvan Bacon      });
79082815dcSEvan Bacon      it('configures the project.pbxproj file with the profile name and apple team id', () => {
80082815dcSEvan Bacon        setProvisioningProfileForPbxproj(projectRoot, {
81082815dcSEvan Bacon          profileName: '*[expo] com.swmansion.dominik.abcd.v2 AppStore 2020-07-24T07:56:22.983Z',
82082815dcSEvan Bacon          appleTeamId: 'Something Spaced',
83082815dcSEvan Bacon        });
84082815dcSEvan Bacon        const pbxprojContents = fs.readFileSync(path.join(projectRoot, pbxProjPath), 'utf-8');
85082815dcSEvan Bacon        expect(pbxprojContents).toMatch(/DevelopmentTeam = "Something Spaced";/);
86082815dcSEvan Bacon      });
87082815dcSEvan Bacon      it('throws descriptive error when target name does not exist', () => {
88082815dcSEvan Bacon        expect(() =>
89082815dcSEvan Bacon          setProvisioningProfileForPbxproj(projectRoot, {
90082815dcSEvan Bacon            targetName: 'faketargetname',
91082815dcSEvan Bacon            profileName: '*[expo] com.swmansion.dominik.abcd.v2 AppStore 2020-07-24T07:56:22.983Z',
92082815dcSEvan Bacon            appleTeamId: 'J5FM626PE2',
93082815dcSEvan Bacon          })
94082815dcSEvan Bacon        ).toThrow("Could not find target 'faketargetname' in project.pbxproj");
95082815dcSEvan Bacon      });
96082815dcSEvan Bacon    });
97082815dcSEvan Bacon  });
98082815dcSEvan Bacon});
99