Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fb01c40

Browse files
jdforsythecatfireparty
authored andcommitted
fix(core): remove defaultProject in workspace when removing project
Fixes #3511
1 parent bf3661e commit fb01c40

File tree

2 files changed

+140
-40
lines changed

2 files changed

+140
-40
lines changed

packages/workspace/src/schematics/remove/lib/update-workspace.spec.ts

Lines changed: 132 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,104 @@ describe('updateWorkspace Rule', () => {
1313
beforeEach(async () => {
1414
tree = new UnitTestTree(Tree.empty());
1515
tree = createEmptyWorkspace(tree) as UnitTestTree;
16+
});
1617

17-
schema = {
18-
projectName: 'ng-app',
19-
skipFormat: false,
20-
forceRemove: false,
21-
};
18+
describe('delete project', async () => {
19+
beforeEach(async () => {
20+
schema = {
21+
projectName: 'ng-app',
22+
skipFormat: false,
23+
forceRemove: false,
24+
};
2225

23-
tree = (await callRule(
24-
updateWorkspaceInTree((workspace) => {
25-
return {
26-
version: 1,
27-
projects: {
28-
'ng-app': {
26+
tree = (await callRule(
27+
updateWorkspaceInTree((workspace) => {
28+
return {
29+
version: 1,
30+
projects: {
31+
'ng-app': {
32+
projectType: 'application',
33+
schematics: {},
34+
root: 'apps/ng-app',
35+
sourceRoot: 'apps/ng-app/src',
36+
prefix: 'happyorg',
37+
architect: {
38+
build: {
39+
builder: '@angular-devkit/build-angular:browser',
40+
options: {},
41+
},
42+
},
43+
},
44+
'ng-app-e2e': {
45+
root: 'apps/ng-app-e2e',
46+
sourceRoot: 'apps/ng-app-e2e/src',
47+
projectType: 'application',
48+
architect: {
49+
e2e: {
50+
builder: '@nrwl/cypress:cypress',
51+
options: {
52+
cypressConfig: 'apps/ng-app-e2e/cypress.json',
53+
tsConfig: 'apps/ng-app-e2e/tsconfig.e2e.json',
54+
devServerTarget: 'ng-app:serve',
55+
},
56+
},
57+
},
58+
},
59+
},
60+
};
61+
}),
62+
tree
63+
)) as UnitTestTree;
64+
});
65+
66+
it('should delete the project', async () => {
67+
let workspace = JSON.parse(tree.read('workspace.json').toString());
68+
expect(workspace.projects['ng-app']).toBeDefined();
69+
70+
tree = (await callRule(updateWorkspace(schema), tree)) as UnitTestTree;
71+
72+
workspace = JSON.parse(tree.read('workspace.json').toString());
73+
expect(workspace.projects['ng-app']).toBeUndefined();
74+
});
75+
});
76+
77+
describe('defaultProject', () => {
78+
beforeEach(async () => {
79+
tree = (await callRule(
80+
updateWorkspaceInTree((workspace) => {
81+
return {
82+
version: 1,
83+
projects: {
84+
'ng-app': {
85+
projectType: 'application',
86+
schematics: {},
87+
root: 'apps/ng-app',
88+
sourceRoot: 'apps/ng-app/src',
89+
prefix: 'happyorg',
90+
architect: {
91+
build: {
92+
builder: '@angular-devkit/build-angular:browser',
93+
options: {},
94+
},
95+
},
96+
},
97+
'ng-app-e2e': {
98+
root: 'apps/ng-app-e2e',
99+
sourceRoot: 'apps/ng-app-e2e/src',
100+
projectType: 'application',
101+
architect: {
102+
e2e: {
103+
builder: '@nrwl/cypress:cypress',
104+
options: {
105+
cypressConfig: 'apps/ng-app-e2e/cypress.json',
106+
tsConfig: 'apps/ng-app-e2e/tsconfig.e2e.json',
107+
devServerTarget: 'ng-app:serve',
108+
},
109+
},
110+
},
111+
},
112+
},
113+
'ng-other-app': {
29114
projectType: 'application',
30115
schematics: {},
31116
root: 'apps/ng-app',
@@ -38,35 +123,44 @@ describe('updateWorkspace Rule', () => {
38123
},
39124
},
40125
},
41-
'ng-app-e2e': {
42-
root: 'apps/ng-app-e2e',
43-
sourceRoot: 'apps/ng-app-e2e/src',
44-
projectType: 'application',
45-
architect: {
46-
e2e: {
47-
builder: '@nrwl/cypress:cypress',
48-
options: {
49-
cypressConfig: 'apps/ng-app-e2e/cypress.json',
50-
tsConfig: 'apps/ng-app-e2e/tsconfig.e2e.json',
51-
devServerTarget: 'ng-app:serve',
52-
},
53-
},
54-
},
55-
},
56-
},
57-
};
58-
}),
59-
tree
60-
)) as UnitTestTree;
61-
});
126+
defaultProject: 'ng-app',
127+
};
128+
}),
129+
tree
130+
)) as UnitTestTree;
131+
});
62132

63-
it('should delete the project', async () => {
64-
let workspace = JSON.parse(tree.read('workspace.json').toString());
65-
expect(workspace.projects['ng-app']).toBeDefined();
133+
it('should remove defaultProject if it matches the project being deleted', async () => {
134+
schema = {
135+
projectName: 'ng-app',
136+
skipFormat: false,
137+
forceRemove: false,
138+
};
139+
140+
let workspace = JSON.parse(tree.read('workspace.json').toString());
141+
expect(workspace.defaultProject).toBeDefined();
142+
143+
tree = (await callRule(updateWorkspace(schema), tree)) as UnitTestTree;
144+
145+
workspace = JSON.parse(tree.read('workspace.json').toString());
146+
expect(workspace.defaultProject).toBeUndefined();
147+
});
66148

67-
tree = (await callRule(updateWorkspace(schema), tree)) as UnitTestTree;
149+
it('should not remove defaultProject if it does not match the project being deleted', async () => {
150+
schema = {
151+
projectName: 'ng-other-app',
152+
skipFormat: false,
153+
forceRemove: false,
154+
};
68155

69-
workspace = JSON.parse(tree.read('workspace.json').toString());
70-
expect(workspace.projects['ng-app']).toBeUndefined();
156+
let workspace = JSON.parse(tree.read('workspace.json').toString());
157+
expect(workspace.defaultProject).toBeDefined();
158+
159+
tree = (await callRule(updateWorkspace(schema), tree)) as UnitTestTree;
160+
161+
workspace = JSON.parse(tree.read('workspace.json').toString());
162+
expect(workspace.defaultProject).toBeDefined();
163+
});
71164
});
165+
72166
});
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
1-
import { updateWorkspaceInTree } from '@nrwl/workspace';
21
import { Schema } from '../schema';
2+
import { SchematicContext, Tree } from '@angular-devkit/schematics';
3+
import { updateWorkspaceInTree, getWorkspacePath } from '@nrwl/workspace';
34

45
/**
56
* Deletes the project from the workspace file
67
*
78
* @param schema The options provided to the schematic
89
*/
910
export function updateWorkspace(schema: Schema) {
10-
return updateWorkspaceInTree((workspace) => {
11+
return updateWorkspaceInTree((workspace, context: SchematicContext, host: Tree) => {
1112
delete workspace.projects[schema.projectName];
13+
if (workspace.defaultProject && workspace.defaultProject === schema.projectName) {
14+
delete workspace.defaultProject;
15+
const workspacePath = getWorkspacePath(host);
16+
context.logger.warn(`Default project was removed in ${workspacePath} because it was "${schema.projectName}". If you want a default project you should define a new one.`);
17+
}
1218
return workspace;
1319
});
1420
}

0 commit comments

Comments
 (0)