Skip to content

Commit a9cc8ff

Browse files
Merge pull request #23 from Exabyte-io/fix/SOF-6197
fix/SOF-6197
2 parents fb73471 + 48b44ac commit a9cc8ff

File tree

4 files changed

+86
-19
lines changed

4 files changed

+86
-19
lines changed

package-lock.json

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/context/index.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { JSONSchemaFormDataProvider } from "./json_schema_provider";
22
import {
3-
ApplicationContextMixinBuilder,
3+
ApplicationContextMixin,
44
JobContextMixin,
5-
MaterialContextMixinBuilder,
6-
MaterialsContextMixinBuilder,
5+
MaterialContextMixin,
6+
MaterialsContextMixin,
77
MaterialsSetContextMixin,
88
MethodDataContextMixin,
99
WorkflowContextMixin,
@@ -18,9 +18,9 @@ export {
1818
JobContextPickKeysForMixin,
1919
JSONSchemaFormDataProvider,
2020
WorkflowContextPickKeysForMixin,
21-
ApplicationContextMixinBuilder,
22-
MaterialContextMixinBuilder,
23-
MaterialsContextMixinBuilder,
21+
ApplicationContextMixin,
22+
MaterialContextMixin,
23+
MaterialsContextMixin,
2424
MaterialsSetContextMixin,
2525
MethodDataContextMixin,
2626
JobContextMixin,

src/context/mixins.js

+17-10
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,31 @@ import CryptoJS from "crypto-js";
33

44
import { compareEntitiesInOrderedSetForSorting } from "../entity/set/ordered/utils";
55

6-
export const ApplicationContextMixinBuilder = (applicationCls) => (superclass) =>
6+
export const ApplicationContextMixin = (superclass) =>
77
class extends superclass {
88
constructor(config) {
99
super(config);
10-
if (!applicationCls)
11-
throw Error("ApplicationContextMixinBuilder: applicationCls is undefined");
10+
if (!this.constructor.applicationCls)
11+
throw Error("ApplicationContextMixin: applicationCls is undefined");
1212
this._application =
13-
(config.context && config.context.application) || applicationCls.createDefault();
13+
(config.context && config.context.application) ||
14+
this.constructor.applicationCls.createDefault();
1415
}
1516

1617
get application() {
1718
return this._application;
1819
}
1920
};
2021

21-
export const MaterialContextMixinBuilder = (materialCls) => (superclass) =>
22+
export const MaterialContextMixin = (superclass) =>
2223
class extends superclass {
2324
constructor(config) {
2425
super(config);
25-
if (!materialCls) throw Error("MaterialContextMixinBuilder: materialCls is undefined");
26+
if (!this.constructor.materialCls) {
27+
throw Error("MaterialContextMixin: materialCls is undefined");
28+
}
2629
this._material = config.context && config.context.material;
27-
if (!this._material) this._material = materialCls.createDefault();
30+
if (!this._material) this._material = this.constructor.materialCls.createDefault();
2831
this.updateMaterialHash();
2932
}
3033

@@ -74,14 +77,18 @@ export const MaterialsSetContextMixin = (superclass) =>
7477
}
7578
};
7679

77-
export const MaterialsContextMixinBuilder = (materialCls) => (superclass) =>
80+
export const MaterialsContextMixin = (superclass) =>
7881
class extends superclass {
7982
constructor(config) {
8083
super(config);
8184
const materials = this.config.context && this.config.context.materials;
82-
if (!materialCls) throw Error("MaterialsContextMixinBuilder: materialCls is undefined");
85+
if (!this.constructor.materialCls) {
86+
throw Error("MaterialsContextMixin: materialCls is undefined");
87+
}
8388
this._materials =
84-
materials && materials.length ? materials : [materialCls.createDefault()];
89+
materials && materials.length
90+
? materials
91+
: [this.constructor.materialCls.createDefault()];
8592
}
8693

8794
get materials() {

tests/context.tests.js

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { expect } from "chai";
2+
import { mix } from "mixwith";
3+
4+
import { ApplicationContextMixin, MaterialContextMixin } from "../src/context/mixins";
5+
import { InMemoryEntity } from "../src/entity";
6+
7+
class MockMaterial {
8+
static createDefault() {
9+
return "defaultMockMaterial";
10+
}
11+
}
12+
13+
class SpecificMockMaterial {
14+
static createDefault() {
15+
return "defaultSpecificMockMaterial";
16+
}
17+
}
18+
19+
class MockApplication {
20+
static createDefault() {
21+
return "defaultMockApplication";
22+
}
23+
}
24+
25+
class SpecificMockApplication {
26+
static createDefault() {
27+
return "defaultSpecificMockApplication";
28+
}
29+
}
30+
31+
class ProviderEntity extends mix(InMemoryEntity).with(
32+
MaterialContextMixin,
33+
ApplicationContextMixin,
34+
) {
35+
static materialCls = MockMaterial;
36+
37+
static applicationCls = MockApplication;
38+
}
39+
40+
class DerivedProviderEntity extends ProviderEntity {
41+
static materialCls = SpecificMockMaterial;
42+
43+
static applicationCls = SpecificMockApplication;
44+
}
45+
46+
describe("Material & Application ContextMixin", () => {
47+
const config = {};
48+
49+
it("uses static entity class", () => {
50+
const provider = new ProviderEntity(config);
51+
expect(provider.material).to.be.equal("defaultMockMaterial");
52+
expect(provider.application).to.be.equal("defaultMockApplication");
53+
});
54+
55+
it("uses static entity class from derived class", () => {
56+
const provider = new DerivedProviderEntity(config);
57+
expect(provider.material).to.be.equal("defaultSpecificMockMaterial");
58+
expect(provider.application).to.be.equal("defaultSpecificMockApplication");
59+
});
60+
});

0 commit comments

Comments
 (0)