1082815dcSEvan Baconimport { vol } from 'memfs';
2082815dcSEvan Baconimport path from 'path';
3082815dcSEvan Bacon
4082815dcSEvan Baconimport { findApplicationTargetWithDependenciesAsync, TargetType } from '../Target';
5082815dcSEvan Bacon
6082815dcSEvan Baconjest.mock('fs');
7082815dcSEvan Bacon
8082815dcSEvan Baconconst originalFs = jest.requireActual('fs');
9082815dcSEvan Bacon
10082815dcSEvan Bacondescribe(findApplicationTargetWithDependenciesAsync, () => {
11082815dcSEvan Bacon  const projectRoot = '/app';
12082815dcSEvan Bacon
13082815dcSEvan Bacon  afterEach(() => vol.reset());
14082815dcSEvan Bacon
15082815dcSEvan Bacon  it('reads the application target and its dependencies', async () => {
16082815dcSEvan Bacon    vol.fromJSON(
17082815dcSEvan Bacon      {
18082815dcSEvan Bacon        'ios/testproject.xcodeproj/project.pbxproj': originalFs.readFileSync(
19082815dcSEvan Bacon          path.join(__dirname, 'fixtures/project-multitarget.pbxproj'),
20082815dcSEvan Bacon          'utf-8'
21082815dcSEvan Bacon        ),
22082815dcSEvan Bacon        'ios/testproject.xcodeproj/xcshareddata/xcschemes/multitarget.xcscheme':
23082815dcSEvan Bacon          originalFs.readFileSync(path.join(__dirname, 'fixtures/multitarget.xcscheme'), 'utf-8'),
24082815dcSEvan Bacon      },
25082815dcSEvan Bacon      projectRoot
26082815dcSEvan Bacon    );
27082815dcSEvan Bacon
28082815dcSEvan Bacon    const applicationTarget = await findApplicationTargetWithDependenciesAsync(
29082815dcSEvan Bacon      projectRoot,
30082815dcSEvan Bacon      'multitarget'
31082815dcSEvan Bacon    );
32082815dcSEvan Bacon    expect(applicationTarget.name).toBe('multitarget');
33082815dcSEvan Bacon    expect(applicationTarget.type).toBe(TargetType.APPLICATION);
34*f421f4ecSDominik Sokal    expect(applicationTarget.signable).toBe(true);
35*f421f4ecSDominik Sokal    expect(applicationTarget.dependencies?.length).toBe(1);
36*f421f4ecSDominik Sokal    expect(applicationTarget.dependencies?.[0].name).toBe('shareextension');
37*f421f4ecSDominik Sokal    expect(applicationTarget.dependencies?.[0].type).toBe(TargetType.EXTENSION);
38*f421f4ecSDominik Sokal    expect(applicationTarget.dependencies?.[0].signable).toBe(true);
39082815dcSEvan Bacon  });
40082815dcSEvan Bacon
41082815dcSEvan Bacon  it('also reads dependency dependencies', async () => {
42082815dcSEvan Bacon    vol.fromJSON(
43082815dcSEvan Bacon      {
44082815dcSEvan Bacon        'ios/easwatchtest.xcodeproj/project.pbxproj': originalFs.readFileSync(
45082815dcSEvan Bacon          path.join(__dirname, 'fixtures/watch.pbxproj'),
46082815dcSEvan Bacon          'utf-8'
47082815dcSEvan Bacon        ),
48082815dcSEvan Bacon        'ios/easwatchtest.xcodeproj/xcshareddata/xcschemes/easwatchtest.xcscheme':
49082815dcSEvan Bacon          originalFs.readFileSync(path.join(__dirname, 'fixtures/watch.xcscheme'), 'utf-8'),
50082815dcSEvan Bacon      },
51082815dcSEvan Bacon      projectRoot
52082815dcSEvan Bacon    );
53082815dcSEvan Bacon
54082815dcSEvan Bacon    const applicationTarget = await findApplicationTargetWithDependenciesAsync(
55082815dcSEvan Bacon      projectRoot,
56082815dcSEvan Bacon      'easwatchtest'
57082815dcSEvan Bacon    );
58082815dcSEvan Bacon    expect(applicationTarget.name).toBe('easwatchtest');
59082815dcSEvan Bacon    expect(applicationTarget.type).toBe(TargetType.APPLICATION);
60*f421f4ecSDominik Sokal    expect(applicationTarget.dependencies?.length).toBe(1);
61*f421f4ecSDominik Sokal    expect(applicationTarget.dependencies?.[0].name).toBe('eas-watch-test');
62*f421f4ecSDominik Sokal    expect(applicationTarget.dependencies?.[0].type).toBe(TargetType.OTHER);
63*f421f4ecSDominik Sokal    expect(applicationTarget.dependencies?.[0].dependencies?.[0].name).toBe(
64082815dcSEvan Bacon      'eas-watch-test WatchKit Extension'
65082815dcSEvan Bacon    );
66*f421f4ecSDominik Sokal    expect(applicationTarget.dependencies?.[0].dependencies?.[0].type).toBe(TargetType.OTHER);
67*f421f4ecSDominik Sokal  });
68*f421f4ecSDominik Sokal
69*f421f4ecSDominik Sokal  it('marks framework targets as non-signable', async () => {
70*f421f4ecSDominik Sokal    vol.fromJSON(
71*f421f4ecSDominik Sokal      {
72*f421f4ecSDominik Sokal        'ios/myapp.xcodeproj/project.pbxproj': originalFs.readFileSync(
73*f421f4ecSDominik Sokal          path.join(__dirname, 'fixtures/project-with-framework.pbxproj'),
74*f421f4ecSDominik Sokal          'utf-8'
75*f421f4ecSDominik Sokal        ),
76*f421f4ecSDominik Sokal        'ios/myapp.xcodeproj/xcshareddata/xcschemes/myapp.xcscheme': originalFs.readFileSync(
77*f421f4ecSDominik Sokal          path.join(__dirname, 'fixtures/framework.xcscheme'),
78*f421f4ecSDominik Sokal          'utf-8'
79*f421f4ecSDominik Sokal        ),
80*f421f4ecSDominik Sokal      },
81*f421f4ecSDominik Sokal      projectRoot
82*f421f4ecSDominik Sokal    );
83*f421f4ecSDominik Sokal
84*f421f4ecSDominik Sokal    const applicationTarget = await findApplicationTargetWithDependenciesAsync(
85*f421f4ecSDominik Sokal      projectRoot,
86*f421f4ecSDominik Sokal      'myapp'
87*f421f4ecSDominik Sokal    );
88*f421f4ecSDominik Sokal    expect(applicationTarget.signable).toBe(true);
89*f421f4ecSDominik Sokal    expect(applicationTarget.dependencies?.[0].signable).toBe(false);
90082815dcSEvan Bacon  });
91082815dcSEvan Bacon});
92