From 3bac936311e90ea5498d51048ada8229ef9a5434 Mon Sep 17 00:00:00 2001 From: Ankit Amrit Raj Date: Tue, 8 Aug 2023 23:16:39 +0530 Subject: [PATCH 1/3] Added optional graphFetchPath attribute in PersistenceTestSpec --- .../DSL_Persistence_ObserverHelper.ts | 1 + ...Persistence_PureProtocolProcessorPlugin.ts | 2 ++ .../V1_DSL_Persistence_PersistenceTest.ts | 10 ++++++ .../V1_DSL_Persistence_ProtocolHelper.ts | 1 + .../DSL_Persistence_PersistenceTest.ts | 10 ++++++ .../DSL_PersistenceV2-graphFetch-basic.pure | 36 ++++++++++++++++++- 6 files changed, 59 insertions(+), 1 deletion(-) diff --git a/packages/legend-extension-dsl-persistence/src/graph-manager/action/changeDetection/DSL_Persistence_ObserverHelper.ts b/packages/legend-extension-dsl-persistence/src/graph-manager/action/changeDetection/DSL_Persistence_ObserverHelper.ts index eab33411da..29429a2821 100644 --- a/packages/legend-extension-dsl-persistence/src/graph-manager/action/changeDetection/DSL_Persistence_ObserverHelper.ts +++ b/packages/legend-extension-dsl-persistence/src/graph-manager/action/changeDetection/DSL_Persistence_ObserverHelper.ts @@ -107,6 +107,7 @@ export const observe_PersistenceTest = skipObservedWithContext( (metamodel: PersistenceTest, context: ObserverContext): PersistenceTest => { makeObservable(metamodel, { id: observable, + graphFetchPath: observable, testBatches: observable, isTestDataFromServiceOutput: observable, hashCode: computed, diff --git a/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/DSL_Persistence_PureProtocolProcessorPlugin.ts b/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/DSL_Persistence_PureProtocolProcessorPlugin.ts index 8bec2477e3..e1a0bd3e41 100644 --- a/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/DSL_Persistence_PureProtocolProcessorPlugin.ts +++ b/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/DSL_Persistence_PureProtocolProcessorPlugin.ts @@ -286,6 +286,7 @@ export class DSL_Persistence_PureProtocolProcessorPlugin ): AtomicTest | undefined => { if (protocol instanceof V1_PersistenceTest) { const test = new PersistenceTest(); + test.graphFetchPath = protocol.graphFetchPath; test.id = protocol.id; test.isTestDataFromServiceOutput = protocol.isTestDataFromServiceOutput; @@ -309,6 +310,7 @@ export class DSL_Persistence_PureProtocolProcessorPlugin ): V1_AtomicTest | undefined => { if (metamodel instanceof PersistenceTest) { const persistenceTest = new V1_PersistenceTest(); + persistenceTest.graphFetchPath = metamodel.graphFetchPath; persistenceTest.id = metamodel.id; persistenceTest.isTestDataFromServiceOutput = metamodel.isTestDataFromServiceOutput; diff --git a/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/model/packageableElements/persistence/V1_DSL_Persistence_PersistenceTest.ts b/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/model/packageableElements/persistence/V1_DSL_Persistence_PersistenceTest.ts index d78f513714..82865e33e9 100644 --- a/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/model/packageableElements/persistence/V1_DSL_Persistence_PersistenceTest.ts +++ b/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/model/packageableElements/persistence/V1_DSL_Persistence_PersistenceTest.ts @@ -18,10 +18,17 @@ import { V1_AtomicTest } from '@finos/legend-graph'; import { type Hashable, hashArray } from '@finos/legend-shared'; import { PERSISTENCE_HASH_STRUCTURE } from '../../../../../../../graph/DSL_Persistence_HashUtils.js'; import type { V1_PersistenceTestBatch } from './V1_DSL_Persistence_PersistenceTestBatch.js'; +import { hashObjectWithoutSourceInformation } from '@finos/legend-graph'; export class V1_PersistenceTest extends V1_AtomicTest implements Hashable { testBatches: V1_PersistenceTestBatch[] = []; isTestDataFromServiceOutput!: boolean; + /** + * Studio does not process value specification, they are left in raw JSON form + * + * @discrepancy model + */ + graphFetchPath?: object | undefined; override get hashCode(): string { return hashArray([ @@ -29,6 +36,9 @@ export class V1_PersistenceTest extends V1_AtomicTest implements Hashable { this.id, this.isTestDataFromServiceOutput, hashArray(this.testBatches), + this.graphFetchPath + ? hashObjectWithoutSourceInformation(this.graphFetchPath) + : '', ]); } } diff --git a/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_Persistence_ProtocolHelper.ts b/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_Persistence_ProtocolHelper.ts index f93b774748..404156eefb 100644 --- a/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_Persistence_ProtocolHelper.ts +++ b/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_Persistence_ProtocolHelper.ts @@ -1143,6 +1143,7 @@ export const V1_persistenceTestModelSchema = ( ): ModelSchema => createModelSchema(V1_PersistenceTest, { _type: usingConstantValueSchema(V1_AtomicTestType.PERSISTENCE_TEST), + graphFetchPath: raw(), id: primitive(), isTestDataFromServiceOutput: primitive(), testBatches: customListWithSchema( diff --git a/packages/legend-extension-dsl-persistence/src/graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_PersistenceTest.ts b/packages/legend-extension-dsl-persistence/src/graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_PersistenceTest.ts index d8f7fb3bde..d05faf7478 100644 --- a/packages/legend-extension-dsl-persistence/src/graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_PersistenceTest.ts +++ b/packages/legend-extension-dsl-persistence/src/graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_PersistenceTest.ts @@ -18,10 +18,17 @@ import { AtomicTest } from '@finos/legend-graph'; import { type Hashable, hashArray } from '@finos/legend-shared'; import { PERSISTENCE_HASH_STRUCTURE } from '../../../../../DSL_Persistence_HashUtils.js'; import type { PersistenceTestBatch } from './DSL_Persistence_PersistenceTestBatch.js'; +import { hashObjectWithoutSourceInformation } from '@finos/legend-graph'; export class PersistenceTest extends AtomicTest implements Hashable { testBatches: PersistenceTestBatch[] = []; isTestDataFromServiceOutput!: boolean; + /** + * Studio does not process value specification, they are left in raw JSON form + * + * @discrepancy model + */ + graphFetchPath?: object | undefined; override get hashCode(): string { return hashArray([ @@ -29,6 +36,9 @@ export class PersistenceTest extends AtomicTest implements Hashable { this.id, this.isTestDataFromServiceOutput, hashArray(this.testBatches), + this.graphFetchPath + ? hashObjectWithoutSourceInformation(this.graphFetchPath) + : '', ]); } } diff --git a/packages/legend-manual-tests/src/__tests__/roundtrip-grammar/cases/DSL_PersistenceV2-graphFetch-basic.pure b/packages/legend-manual-tests/src/__tests__/roundtrip-grammar/cases/DSL_PersistenceV2-graphFetch-basic.pure index 9bebf8bd93..4f382e7ca3 100644 --- a/packages/legend-manual-tests/src/__tests__/roundtrip-grammar/cases/DSL_PersistenceV2-graphFetch-basic.pure +++ b/packages/legend-manual-tests/src/__tests__/roundtrip-grammar/cases/DSL_PersistenceV2-graphFetch-basic.pure @@ -130,6 +130,40 @@ Persistence test::TestPersistence } tests: [ - + test1: + { + testBatches: + [ + testBatch1: + { + data: + { + connection: + { + ExternalFormat + #{ + contentType: 'application/json'; + data: '[{"ID":1, "AMOUNT":100, "SOURCE_FROM": "2022-01-01 00:00:00.0","DELETED": "N"},{"ID":2, "AMOUNT":200, "SOURCE_FROM": "2022-01-01 00:00:00.0","DELETED": "N"},{"ID":3, "AMOUNT":400, "SOURCE_FROM": "2022-01-01 00:00:00.0","DELETED": "N"}]'; + }# + } + } + asserts: + [ + assert1: + EqualToJson + #{ + expected: + ExternalFormat + #{ + contentType: 'application/json'; + data: '[{"ID":1,"AMOUNT":100,"BATCH_IN":1,"THRU_Z":"9999-12-31 23:59:59.0","BATCH_OUT":999999999,"FROM_Z":"2022-01-01 00:00:00.0"},{"ID":2,"AMOUNT":200,"BATCH_IN":1,"THRU_Z":"9999-12-31 23:59:59.0","BATCH_OUT":999999999,"FROM_Z":"2022-01-01 00:00:00.0"},{"ID":3,"AMOUNT":400,"BATCH_IN":1,"THRU_Z":"9999-12-31 23:59:59.0","BATCH_OUT":999999999,"FROM_Z":"2022-01-01 00:00:00.0"}]'; + }#; + }# + ] + } + ] + isTestDataFromServiceOutput: true; + graphFetchPath: #/test::model::Firm/employees#; + } ] } From 039db26baf20d5b4b5d71b3207508ad729bce4c7 Mon Sep 17 00:00:00 2001 From: Ankit Amrit Raj Date: Tue, 8 Aug 2023 23:21:32 +0530 Subject: [PATCH 2/3] Added changeset --- .changeset/fuzzy-tigers-smile.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fuzzy-tigers-smile.md diff --git a/.changeset/fuzzy-tigers-smile.md b/.changeset/fuzzy-tigers-smile.md new file mode 100644 index 0000000000..a132550339 --- /dev/null +++ b/.changeset/fuzzy-tigers-smile.md @@ -0,0 +1,5 @@ +--- +'@finos/legend-extension-dsl-persistence': patch +--- + +Added optional graphFetchPath attribute in PersistenceTestSpec From 4f0f571fde137036f410c9387c3b2513451fb7d6 Mon Sep 17 00:00:00 2001 From: Ankit Amrit Raj Date: Tue, 8 Aug 2023 23:26:32 +0530 Subject: [PATCH 3/3] lint fix --- .../persistence/V1_DSL_Persistence_PersistenceTest.ts | 6 ++++-- .../persistence/DSL_Persistence_PersistenceTest.ts | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/model/packageableElements/persistence/V1_DSL_Persistence_PersistenceTest.ts b/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/model/packageableElements/persistence/V1_DSL_Persistence_PersistenceTest.ts index 82865e33e9..d94a0dbb19 100644 --- a/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/model/packageableElements/persistence/V1_DSL_Persistence_PersistenceTest.ts +++ b/packages/legend-extension-dsl-persistence/src/graph-manager/protocol/pure/v1/model/packageableElements/persistence/V1_DSL_Persistence_PersistenceTest.ts @@ -14,11 +14,13 @@ * limitations under the License. */ -import { V1_AtomicTest } from '@finos/legend-graph'; +import { + V1_AtomicTest, + hashObjectWithoutSourceInformation, +} from '@finos/legend-graph'; import { type Hashable, hashArray } from '@finos/legend-shared'; import { PERSISTENCE_HASH_STRUCTURE } from '../../../../../../../graph/DSL_Persistence_HashUtils.js'; import type { V1_PersistenceTestBatch } from './V1_DSL_Persistence_PersistenceTestBatch.js'; -import { hashObjectWithoutSourceInformation } from '@finos/legend-graph'; export class V1_PersistenceTest extends V1_AtomicTest implements Hashable { testBatches: V1_PersistenceTestBatch[] = []; diff --git a/packages/legend-extension-dsl-persistence/src/graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_PersistenceTest.ts b/packages/legend-extension-dsl-persistence/src/graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_PersistenceTest.ts index d05faf7478..c0ae0dac6c 100644 --- a/packages/legend-extension-dsl-persistence/src/graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_PersistenceTest.ts +++ b/packages/legend-extension-dsl-persistence/src/graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_PersistenceTest.ts @@ -14,11 +14,13 @@ * limitations under the License. */ -import { AtomicTest } from '@finos/legend-graph'; +import { + AtomicTest, + hashObjectWithoutSourceInformation, +} from '@finos/legend-graph'; import { type Hashable, hashArray } from '@finos/legend-shared'; import { PERSISTENCE_HASH_STRUCTURE } from '../../../../../DSL_Persistence_HashUtils.js'; import type { PersistenceTestBatch } from './DSL_Persistence_PersistenceTestBatch.js'; -import { hashObjectWithoutSourceInformation } from '@finos/legend-graph'; export class PersistenceTest extends AtomicTest implements Hashable { testBatches: PersistenceTestBatch[] = [];