Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bundles/@yarnpkg/plugin-workspace-since.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

123 changes: 123 additions & 0 deletions sources/getUpdatedWorkspaces/getUpdatedWorkspaces.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -222,4 +222,127 @@ describe('getUpdatedWorkspaces', () => {
repository.cleanup();
}
});

it('변경된 워크스페이스를 의존하는 워크스페이스도 결과에 포함된다', async () => {
const repository = await initializeTestRepository();

try {
const [package1, package2] = await Promise.all([
repository.addPackage('package1'),
repository.addPackage('package2'),
]);

package2.addFile(
'package.json',
JSON.stringify({
name: 'package2',
private: true,
version: '1.0.0',
dependencies: {
package1: 'workspace:*',
},
}),
);
await repository.install();

const beforeCommit = await repository.commitAll('Add packages with dependency');
const beforeCommitSha = beforeCommit.commit;

await package1.addFile('index.ts', '"I am updated"');
const afterCommit = await repository.commitAll('Update package1');
const afterCommitSha = afterCommit.commit;

const updatedWorkspaces = await getUpdatedWorkspaces({
from: beforeCommitSha,
to: afterCommitSha,
workspaceDir: repository.dir,
});

expect(updatedWorkspaces).toContain(package1.path);
expect(updatedWorkspaces).toContain(package2.path);
} finally {
repository.cleanup();
}
});

it('간접적으로 의존하는 워크스페이스도 결과에 포함된다', async () => {
const repository = await initializeTestRepository();

try {
const [package1, package2, package3] = await Promise.all([
repository.addPackage('package1'),
repository.addPackage('package2'),
repository.addPackage('package3'),
]);

await package2.addFile(
'package.json',
JSON.stringify({
name: 'package2',
private: true,
version: '1.0.0',
dependencies: {
package1: 'workspace:*',
},
}),
);
await package3.addFile(
'package.json',
JSON.stringify({
name: 'package3',
private: true,
version: '1.0.0',
dependencies: {
package2: 'workspace:*',
},
}),
);
await repository.install();

const beforeCommit = await repository.commitAll('Add packages with transitive dependency');
const beforeCommitSha = beforeCommit.commit;

await package1.addFile('index.ts', '"I am updated"');
const afterCommit = await repository.commitAll('Update package1');
const afterCommitSha = afterCommit.commit;

const updatedWorkspaces = await getUpdatedWorkspaces({
from: beforeCommitSha,
to: afterCommitSha,
workspaceDir: repository.dir,
});

expect(updatedWorkspaces).toContain(package1.path);
expect(updatedWorkspaces).toContain(package2.path);
expect(updatedWorkspaces).toContain(package3.path);
} finally {
repository.cleanup();
}
});

it('중첩된 워크스페이스의 파일이 변경되면 에러를 발생시킨다', async () => {
const repository = await initializeTestRepository({}, ['services/root', 'services/root/nested']);

try {
await repository.addPackage('root', { path: 'services/root' });
const nested = await repository.addPackage('nested', { path: 'services/root/nested' });

const beforeCommit = await repository.commitAll('Add nested workspaces');
const beforeCommitSha = beforeCommit.commit;

await nested.addFile('index.ts', '"I am updated"');
const afterCommit = await repository.commitAll('Update nested');
const afterCommitSha = afterCommit.commit;

await expect(
getUpdatedWorkspaces({
from: beforeCommitSha,
to: afterCommitSha,
workspaceDir: repository.dir,
}),
).rejects.toThrow();
} finally {
repository.cleanup();
}
});
});
Loading