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

feat(jest-transformer): Add babel transform for new scoped imports #463

Merged
merged 8 commits into from
Jul 2, 2018
Merged
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
14 changes: 10 additions & 4 deletions packages/lwc-jest-transformer/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,23 @@ const crypto = require('crypto');
const engineVersion = require('lwc-engine/package.json').version;
const compilerVersion = require('lwc-compiler/package.json').version;
const { waitForPromise } = require('./utils');
const labelSchemaImport = require('./transforms/label-schema-import');
const resourceSchemaImport = require('./transforms/resource-schema-import');
const apexScopedImport = require('./transforms/apex-scoped-import');
const labelScopedImport = require('./transforms/label-scoped-import');
const resourceScopedImport = require('./transforms/resource-scoped-import');
const schemaScopedImport = require('./transforms/schema-scoped-import');
const userScopedImport = require('./transforms/user-scoped-import');

const BABEL_CONFIG = {
"presets": [
jestPreset,
],
"plugins": [
babelCommonJs,
labelSchemaImport,
resourceSchemaImport,
apexScopedImport,
labelScopedImport,
resourceScopedImport,
schemaScopedImport,
userScopedImport,
]
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { createElement } from 'engine';
import Labels from 'example-labels';

jest.mock('@label/c.mocked', () => {
jest.mock('@salesforce/label/c.mocked', () => {
return { default: "value set in test" };
}, { virtual: true });

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Element, track } from 'engine';
import mockedImport from '@label/c.mocked';
import unmockedImport from '@label/c.unmocked';
import mockedImport from '@salesforce/label/c.mocked';
import unmockedImport from '@salesforce/label/c.unmocked';

export default class Labels extends Element {
@track
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { createElement } from 'engine';
import ResourceUrl from 'example-resource-url';

jest.mock('@resource-url/c.mocked', () => {
jest.mock('@salesforce/resource-url/c.mocked', () => {
return { default: "value set in test"};
}, { virtual: true });

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Element } from 'engine';
import mockedImport from '@resource-url/c.mocked';
import unmockedImport from '@resource-url/c.unmocked';
import mockedImport from '@salesforce/resource-url/c.mocked';
import unmockedImport from '@salesforce/resource-url/c.unmocked';

export default class Labels extends Element {
mockedResource = mockedImport;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
const test = require('./utils/test-transform').test(
require('../apex-scoped-import')
);

const DEFAULT_FUNCTION = function() { return Promise.resolve(); };

describe('@salesforce/apex import', () => {
test('does default transformation', `
import myMethod from '@salesforce/apex/FooController.fooMethod';
`, `
let myMethod;

try {
myMethod = require("@salesforce/apex/FooController.fooMethod").default;
} catch (e) {
myMethod = function () {
return Promise.resolve();
};
}
`);

test('allows non-@salesforce/apex named imports', `
import { otherNamed } from './something-valid';
import myMethod from '@salesforce/apex/FooController.fooMethod';
`, `
import { otherNamed } from './something-valid';
let myMethod;

try {
myMethod = require("@salesforce/apex/FooController.fooMethod").default;
} catch (e) {
myMethod = function () {
return Promise.resolve();
};
}
`);

test('throws error if using named import', `
import { Id } from '@salesforce/apex/FooController.fooMethod';
`, undefined, 'Invalid import from @salesforce/apex/FooController.fooMethod');

test('throws error if renamed default imports', `
import { default as label } from '@salesforce/apex/FooController.fooMethod';
`, undefined, 'Invalid import from @salesforce/apex/FooController.fooMethod');

test('throws error if renamed multiple default imports', `
import { default as label, foo } from '@salesforce/apex/FooController.fooMethod';
`, undefined, 'Invalid import from @salesforce/apex/FooController.fooMethod');
});

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
const test = require('./utils/test-transform').test(
require('../label-scoped-import')
);

describe('@salesforce/label import', () => {
test('does default transformation', `
import myLabel from '@salesforce/label/c.foo';
`, `
let myLabel;

try {
myLabel = require("@salesforce/label/c.foo").default;
} catch (e) {
myLabel = "c.foo";
}
`);

test('allows non-@salesforce/label named imports', `
import { otherNamed } from './something-valid';
import myLabel from '@salesforce/label/c.foo';
`, `
import { otherNamed } from './something-valid';
let myLabel;

try {
myLabel = require("@salesforce/label/c.foo").default;
} catch (e) {
myLabel = "c.foo";
}
`);

test('throws error if using named import', `
import { myLabel } from '@salesforce/label/c.foo';
`, undefined, 'Invalid import from @salesforce/label/c.foo');

test('throws error if renamed default imports', `
import { default as label } from '@salesforce/label/c.foo';
`, undefined, 'Invalid import from @salesforce/label/c.foo');

test('throws error if renamed multipel default imports', `
import { default as label, foo } from '@salesforce/label/c.foo';
`, undefined, 'Invalid import from @salesforce/label/c.foo');
});

// W-5140078 - remove these when all usages of @label are converted to @salesforce/label
describe('legacy @label import', () => {
test('does default transformation', `
import myLabel from '@label/c.foo';
`, `
let myLabel;

try {
myLabel = require("@label/c.foo").default;
} catch (e) {
myLabel = "c.foo";
}
`);

test('allows non-@label named imports', `
import { otherNamed } from './something-valid';
import myLabel from '@label/c.foo';
`, `
import { otherNamed } from './something-valid';
let myLabel;

try {
myLabel = require("@label/c.foo").default;
} catch (e) {
myLabel = "c.foo";
}
`);
});

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const test = require('./utils/test-transform').test(
require('../resource-scoped-import')
);

describe('@salesforce/resource-url import', () => {
test('does default transformation', `
import myResource from '@salesforce/resource-url/c.foo';
`, `
let myResource;

try {
myResource = require("@salesforce/resource-url/c.foo").default;
} catch (e) {
myResource = "c.foo";
}
`);

test('allows non-@salesforce/resource-url named imports', `
import { otherNamed } from './something-valid';
import myResource from '@salesforce/resource-url/c.foo';
`, `
import { otherNamed } from './something-valid';
let myResource;

try {
myResource = require("@salesforce/resource-url/c.foo").default;
} catch (e) {
myResource = "c.foo";
}
`);

test('throws error if using named import', `
import { myResource } from '@salesforce/resource-url/c.foo';
`, undefined, 'Invalid import from @salesforce/resource-url/c.foo');

test('throws error if renamed default imports', `
import { default as resource } from '@salesforce/resource-url/c.foo';
`, undefined, 'Invalid import from @salesforce/resource-url/c.foo');

test('throws error if renamed multipel default imports', `
import { default as resource, foo } from '@salesforce/resource-url/c.foo';
`, undefined, 'Invalid import from @salesforce/resource-url/c.foo');
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
const test = require('./utils/test-transform').test(
require('../schema-scoped-import')
);

describe('@salesforce/schema import', () => {
test('does SObject schema transformation', `
import objectApiName from '@salesforce/schema/Opportunity';
`, `
let objectApiName;

try {
objectApiName = require("@salesforce/schema/Opportunity").default;
} catch (e) {
objectApiName = {
objectApiName: "Opportunity"
};
}
`);

test('does field schema transformation', `
import objectApiName from '@salesforce/schema/Opportunity.Account';
`, `
let objectApiName;

try {
objectApiName = require("@salesforce/schema/Opportunity.Account").default;
} catch (e) {
objectApiName = {
objectApiName: "Opportunity",
fieldApiName: "Account"
};
}
`);

test('does spanning field schema transformation', `
import objectApiName from '@salesforce/schema/Opportunity.Account.Name';
`, `
let objectApiName;

try {
objectApiName = require("@salesforce/schema/Opportunity.Account.Name").default;
} catch (e) {
objectApiName = {
objectApiName: "Opportunity",
fieldApiName: "Account.Name"
};
}
`);

test('allows non-@salesforce/schema named imports', `
import { otherNamed } from './something-valid';
import objectApiName from '@salesforce/schema/Opportunity';
`, `
import { otherNamed } from './something-valid';
let objectApiName;

try {
objectApiName = require("@salesforce/schema/Opportunity").default;
} catch (e) {
objectApiName = {
objectApiName: "Opportunity"
};
}
`);

test('throws error if using named import', `
import { myResource } from '@salesforce/schema/Opportunity.Account.Name';
`, undefined, 'Invalid import from @salesforce/schema/Opportunity.Account.Name');

test('throws error if renamed default imports', `
import { default as resource } from '@salesforce/schema/Opportunity.Account.Name';
`, undefined, 'Invalid import from @salesforce/schema/Opportunity.Account.Name');

test('throws error if renamed multipel default imports', `
import { default as resource, foo } from '@salesforce/schema/Opportunity.Account.Name';
`, undefined, 'Invalid import from @salesforce/schema/Opportunity.Account.Name');
});
Loading