Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add e2e-test to bit-lane-eject command #8820

Merged
merged 3 commits into from
Apr 23, 2024
Merged
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
75 changes: 75 additions & 0 deletions e2e/harmony/lanes/lane-eject.e2e.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import chai, { expect } from 'chai';
import path from 'path';
import NpmCiRegistry, { supportNpmCiRegistryTesting } from '../../npm-ci-registry';
import Helper from '../../../src/e2e-helper/e2e-helper';
import { DEFAULT_OWNER } from '../../../src/e2e-helper/e2e-scopes';

chai.use(require('chai-fs'));

describe('bit lane command', function () {
this.timeout(0);
let helper: Helper;
before(() => {
helper = new Helper();
});
after(() => {
helper.scopeHelper.destroy();
});
(supportNpmCiRegistryTesting ? describe : describe.skip)('eject components with dependencies after export', () => {
let npmCiRegistry: NpmCiRegistry;
let scopeWithoutOwner: string;
before(async () => {
helper = new Helper({ scopesOptions: { remoteScopeWithDot: true } });
helper.scopeHelper.setNewLocalAndRemoteScopes();
scopeWithoutOwner = helper.scopes.remoteWithoutOwner;
helper.fixtures.populateComponents(3);
npmCiRegistry = new NpmCiRegistry(helper);
npmCiRegistry.configureCiInPackageJsonHarmony();
await npmCiRegistry.init();
helper.command.tagAllComponents();
helper.command.export();
helper.command.createLane();
helper.command.snapAllComponentsWithoutBuild('--unmodified');
helper.command.export();
helper.scopeHelper.removeRemoteScope();
npmCiRegistry.setResolver();
});
after(() => {
npmCiRegistry.destroy();
});
describe('eject with the default options', () => {
let ejectOutput: string;
before(() => {
ejectOutput = helper.command.ejectFromLane('comp1');
});
it('should indicate that the eject was successful', () => {
expect(ejectOutput).to.have.string('successfully ejected');
});
it('should save the component in workspace.jsonc', () => {
const workspaceJson = helper.workspaceJsonc.read();
expect(workspaceJson['teambit.dependencies/dependency-resolver'].policy.dependencies).to.have.property(
`@${DEFAULT_OWNER}/${scopeWithoutOwner}.comp1`
);
});
it('should mark the component as deleted on the lane', () => {
const status = helper.command.statusJson();
expect(status.locallySoftRemoved).to.have.lengthOf(1);
});
it('should have the component files as a package (in node_modules)', () => {
const fileInPackage = path.join(`node_modules/@${DEFAULT_OWNER}`, `${scopeWithoutOwner}.comp1`, 'index.js');
expect(path.join(helper.scopes.localPath, fileInPackage)).to.be.a.path();
});
it('should delete the original component files from the file-system', () => {
expect(path.join(helper.scopes.localPath, 'comp1')).not.to.be.a.path();
});
it('bit status should show no issues', () => {
helper.command.expectStatusToNotHaveIssues();
});
it('should not delete the objects from the scope', () => {
const listScope = helper.command.listLocalScopeParsed('--scope');
const ids = listScope.map((l) => l.id);
expect(ids).to.include(`${helper.scopes.remote}/comp1`);
});
});
});
});