All Downloads are FREE. Search and download functionalities are using the official Maven repository.

core_analytics_mapping.modelCoverage.analyticsTest.pure Maven / Gradle / Ivy

// Copyright 2022 Goldman Sachs
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import meta::analytics::mapping::modelCoverage::*;
import meta::pure::mapping::*;

function meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalytics(mapping: Mapping[1]): MappingModelCoverageAnalysisResult[1]
{
  meta::analytics::mapping::modelCoverage::analyze($mapping, false, false, false);
}

function meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalyticsWithMappedEntityInfo(mapping: Mapping[1]): MappingModelCoverageAnalysisResult[1]
{
  meta::analytics::mapping::modelCoverage::analyze($mapping, true, false, false);
}

// Relational
function <> meta::analytics::mapping::modelCoverage::test::testSimpleRelationalMappingCoverage():Boolean[1]
{
  let result = meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalytics(meta::analytics::mapping::modelCoverage::test::sampleRelationalMapping);
  let mappedEntityForFirm = $result.mappedEntities->filter(mp|$mp.path == 'meta::analytics::mapping::modelCoverage::test::Firm');
  assert($mappedEntityForFirm.properties->size() == 4);
  assertContains($mappedEntityForFirm.properties.name, 'id');
  // qualified property
  assertContains($mappedEntityForFirm.properties.name, 'employeeSize');
  // embedded relational mapping
  assertContains($mappedEntityForFirm.properties.name, 'employees');
  assertContains($result.mappedEntities.path, $mappedEntityForFirm.properties->filter(p|$p.name == 'employees')->toOne()->cast(@EntityMappedProperty).entityPath);

  let mappedEntityForLegalEntity = $result.mappedEntities->filter(mp|$mp.path == 'meta::analytics::mapping::modelCoverage::test::LegalEntity');
  assert($mappedEntityForLegalEntity.properties->size() == 2);
}

function <> meta::analytics::mapping::modelCoverage::test::testSimpleRelationalInheritanceMappingCoverage():Boolean[1]
{
  let result = meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalytics(meta::analytics::mapping::modelCoverage::test::sampleRelationalMapping);
  let mappedEntityForLegalEntity = $result.mappedEntities->filter(mp|$mp.path == 'meta::analytics::mapping::modelCoverage::test::LegalEntity');
  assert($mappedEntityForLegalEntity.properties->size() == 2);
  assertContains($mappedEntityForLegalEntity.properties->filter(p|$p->instanceOf(EntityMappedProperty))->cast(@EntityMappedProperty).entityPath, '@meta::analytics::mapping::modelCoverage::test::Firm');
  assertContains($mappedEntityForLegalEntity.properties->filter(p|$p->instanceOf(EntityMappedProperty))->cast(@EntityMappedProperty).entityPath, 'meta::analytics::mapping::modelCoverage::test::Address');
}

function <> meta::analytics::mapping::modelCoverage::test::testSimpleRelationalUnionMappingCoverage():Boolean[1]
{
  let result = meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalytics(meta::analytics::mapping::modelCoverage::test::sampleRelationalMapping);
  let mappedEntityForStreet = $result.mappedEntities->filter(mp|$mp.path == 'meta::analytics::mapping::modelCoverage::test::Street');
  assert($mappedEntityForStreet.properties->size() == 1);
  assertContains($mappedEntityForStreet.properties.name, 'zipcode');
}

// M2M
function <> meta::analytics::mapping::modelCoverage::test::testSimpleM2MMappingCoverage():Boolean[1]
{
  let result = meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalytics(meta::analytics::mapping::modelCoverage::test::sampleModelToModelMapping);
  let mappedEntityForTargetFirm = $result.mappedEntities->filter(mp|$mp.path == 'meta::analytics::mapping::modelCoverage::test::_Firm');
  assert($mappedEntityForTargetFirm.properties->size() == 2);
  assertContains($mappedEntityForTargetFirm.properties.name, 'employees');
}

function <> meta::analytics::mapping::modelCoverage::test::testSimpleUnionM2MMappingCoverage():Boolean[1]
{
  let result = meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalytics(meta::analytics::mapping::modelCoverage::test::sampleModelToModelMapping);
  let mappedEntityForTargetStreet = $result.mappedEntities->filter(mp|$mp.path == 'meta::analytics::mapping::modelCoverage::test::_Street');
  assert($mappedEntityForTargetStreet.properties->size() == 1);
  assertContains($mappedEntityForTargetStreet.properties.name, 'streetName');
}

//-----------------------Test Auto Mapped Properties -----------------------
function <> meta::analytics::mapping::modelCoverage::test::testAutoMappedPrimitivePropertiesMappingCoverage():Boolean[1]
{
  let result = meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalytics(meta::analytics::mapping::modelCoverage::test::sampleModelToModelMapping);
  let mappedEntityForTargetLegalEntity = $result.mappedEntities->filter(mp|$mp.path == 'meta::analytics::mapping::modelCoverage::test::_LegalEntity');
  assert($mappedEntityForTargetLegalEntity.properties->size() == 1); 
  // auto-mapped property
  assertContains($mappedEntityForTargetLegalEntity.properties.name, 'legalName');
}

function <> meta::analytics::mapping::modelCoverage::test::testAutoMappedComplexPropertiesMappingCoverage():Boolean[1]
{
  let grammar = 'Class meta::analytics::mapping::modelCoverage::test::Target\n'+
  '{\n'+
  '  tgtId: String[1];\n'+
  '  shared: meta::analytics::mapping::modelCoverage::test::Shared[1];\n'+
  '}\n'+
  'Class meta::analytics::mapping::modelCoverage::test::Shared\n'+
  '{\n'+
  '  sharedId: String[1];\n'+
  '}\n'+
  'Class meta::analytics::mapping::modelCoverage::test::Source\n'+
  '{\n'+
  '  srcId: String[1];\n'+
  '  shared: meta::analytics::mapping::modelCoverage::test::Shared[1];\n'+
  '}\n'+
  '###Mapping\n'+
  'Mapping meta::analytics::mapping::modelCoverage::test::simpleAutoMappedMapping\n'+
  '(\n'+
  '  *meta::analytics::mapping::modelCoverage::test::Target:Pure\n'+
  '  {\n'+
  '    ~src meta::analytics::mapping::modelCoverage::test::Source\n'+
  '    tgtId: $src.srcId,\n'+
  '    shared: $src.shared\n'+
  '  }\n'+
  ')\n';
  let elements = meta::legend::compileLegendGrammar($grammar);
  let autoMappedMapping = $elements->filter(e|$e->instanceOf(Mapping))->at(0)->cast(@Mapping);
  let result = meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalytics($autoMappedMapping);
  assert($result.mappedEntities->size() == 2); 
  assertContains($result.mappedEntities.path, 'meta::analytics::mapping::modelCoverage::test::Target_meta::analytics::mapping::modelCoverage::test::Source_autoMapped_shared');
}


function <> meta::analytics::mapping::modelCoverage::test::testAutoMappedComplexPropertiesMappingCoverageWithMappedEntityInfo():Boolean[1]
{
  let grammar = 'Class meta::analytics::mapping::modelCoverage::test::Target\n'+
  '{\n'+
  '  tgtId: String[1];\n'+
  '  shared: meta::analytics::mapping::modelCoverage::test::Shared[1];\n'+
  '}\n'+
  'Class meta::analytics::mapping::modelCoverage::test::Shared\n'+
  '{\n'+
  '  sharedId: String[1];\n'+
  '}\n'+
  'Class meta::analytics::mapping::modelCoverage::test::Source\n'+
  '{\n'+
  '  srcId: String[1];\n'+
  '  shared: meta::analytics::mapping::modelCoverage::test::Shared[1];\n'+
  '}\n'+
  '###Mapping\n'+
  'Mapping meta::analytics::mapping::modelCoverage::test::simpleAutoMappedMapping\n'+
  '(\n'+
  '  *meta::analytics::mapping::modelCoverage::test::Target:Pure\n'+
  '  {\n'+
  '    ~src meta::analytics::mapping::modelCoverage::test::Source\n'+
  '    tgtId: $src.srcId,\n'+
  '    shared: $src.shared\n'+
  '  }\n'+
  ')\n';
  let elements = meta::legend::compileLegendGrammar($grammar);
  let autoMappedMapping = $elements->filter(e|$e->instanceOf(Mapping))->at(0)->cast(@Mapping);
  let result = meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalyticsWithMappedEntityInfo($autoMappedMapping);
  assert($result.mappedEntities->size() == 2); 
  assertContains($result.mappedEntities.path, 'meta::analytics::mapping::modelCoverage::test::Target_meta::analytics::mapping::modelCoverage::test::Source_autoMapped_shared');
  assert($result.mappedEntities->filter(m |$m.info->isNotEmpty())->size() == 2);
}

function <> meta::analytics::mapping::modelCoverage::test::testCyclicalAutoMappedComplexPropertiesMappingCoverage():Boolean[1]
{
  let grammar = 'Class meta::analytics::mapping::modelCoverage::test::Target\n'+
  '{\n'+
  '  tgtId: String[1];\n'+
  '  shared: meta::analytics::mapping::modelCoverage::test::Shared[1];\n'+
  '}\n'+
  'Class meta::analytics::mapping::modelCoverage::test::Shared\n'+
  '{\n'+
  '  sharedId: String[1];\n'+
  '  sharedToAddress: meta::analytics::mapping::modelCoverage::test::Address[1];\n' + 
  '}\n'+
  'Class meta::analytics::mapping::modelCoverage::test::Address\n'+
  '{\n'+
  '  Id: String[1];\n'+
  '  addressToShared:meta::analytics::mapping::modelCoverage::test::Shared[1];\n'+
  '}\n'+
  'Class meta::analytics::mapping::modelCoverage::test::Source\n'+
  '{\n'+
  '  srcId: String[1];\n'+
  '  shared: meta::analytics::mapping::modelCoverage::test::Shared[1];\n'+
  '}\n'+
  '###Mapping\n'+
  'Mapping meta::analytics::mapping::modelCoverage::test::simpleAutoMappedMapping\n'+
  '(\n'+
  '  *meta::analytics::mapping::modelCoverage::test::Target:Pure\n'+
  '  {\n'+
  '    ~src meta::analytics::mapping::modelCoverage::test::Source\n'+
  '    tgtId: $src.srcId,\n'+
  '    shared: $src.shared\n'+
  '  }\n'+
  ')\n';
  let elements = meta::legend::compileLegendGrammar($grammar);
  let autoMappedMapping = $elements->filter(e|$e->instanceOf(Mapping))->at(0)->cast(@Mapping);
  let result = meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalytics($autoMappedMapping);
  assert($result.mappedEntities->size() == 3); 
  assertContains($result.mappedEntities.path, 'meta::analytics::mapping::modelCoverage::test::Target');
  assertContains($result.mappedEntities.path, 'meta::analytics::mapping::modelCoverage::test::Target_meta::analytics::mapping::modelCoverage::test::Source_autoMapped_shared');
  assertContains($result.mappedEntities.path, 'meta::analytics::mapping::modelCoverage::test::Target_meta::analytics::mapping::modelCoverage::test::Source_autoMapped_shared_sharedToAddress');
}

function <> meta::analytics::mapping::modelCoverage::test::testAutoMappedSemiStructuredMappingCoverage():Boolean[1]
{
  let semiGrammar = 
  '###Mapping\n'+
  'Mapping inheritance::mapping::MemSQLMapping\n'+
  '(\n'+
  '  inheritance::model::Person: Relational\n'+
  '  {\n'+
  '    ~primaryKey\n'+
  '    (\n'+
  '      [inheritance::store::MemSQLDB]PERSON_SCHEMA.PERSON_TABLE.ID\n'+
  '    )\n'+
  '    ~mainTable [inheritance::store::MemSQLDB]PERSON_SCHEMA.PERSON_TABLE\n'+
  '    firstName: [inheritance::store::MemSQLDB]PERSON_SCHEMA.PERSON_TABLE.FIRSTNAME,\n'+
  '    lastName: [inheritance::store::MemSQLDB]PERSON_SCHEMA.PERSON_TABLE.LASTNAME,\n'+
  '    firm: Binding inheritance::store::FirmBinding : [inheritance::store::MemSQLDB]PERSON_SCHEMA.PERSON_TABLE.FIRM_DETAILS\n'+
  '  }\n'+
  ')\n'+
  '###Relational\n'+
  'Database inheritance::store::MemSQLDB\n'+
  '(\n'+
  '  Schema PERSON_SCHEMA\n'+
  '  (\n'+
  '    Table PERSON_TABLE\n'+
  '    (\n'+
  '      ID INTEGER PRIMARY KEY,\n'+
  '      FIRSTNAME VARCHAR(100),\n'+
  '     LASTNAME VARCHAR(100),\n'+
  '      FIRM_DETAILS JSON,\n'+
  '      MANAGERID INTEGER\n'+
  '    )\n'+
  '  )\n'+
  ')\n'+
  '###Pure\n'+
  'Class inheritance::model::Street\n'+
  '{\n'+
  '  name: String[1];\n'+
  '}\n'+
  'Class inheritance::model::Address\n'+
  '{\n'+
  '  name: String[1];\n'+
  '  street: inheritance::model::Street[1];\n'+
  '}\n'+
  'Class inheritance::model::Person\n'+
  '{\n'+
  '  firstName: String[1];\n'+
  '  lastName: String[1];\n'+
  '  firm: inheritance::model::Firm[1];\n'+
  '}\n'+
  'Class inheritance::model::Firm\n'+
  '{\n'+
  '  legalName: String[1];\n'+
  '  address: inheritance::model::Address[1];\n'+
  '}\n'+
  '###ExternalFormat\n'+
  'Binding inheritance::store::FirmBinding\n'+
  '{\n'+
  '  contentType: \'application/json\';\n'+
  '  modelIncludes: [\n'+
  '    inheritance::model::Firm,\n'+
  '    inheritance::model::Address\n'+
  '  ];\n'+
  '}';
  let elements = meta::legend::compileLegendGrammar($semiGrammar);
  let autoMappedMapping = $elements->filter(e|$e->instanceOf(Mapping))->at(0)->cast(@Mapping);
  let result = meta::analytics::mapping::modelCoverage::test::generateModelCoverageAnalytics($autoMappedMapping);
  assert($result.mappedEntities->size() == 4); 
  assertContains($result.mappedEntities.path, 'semi_structured_generated_embedded_inheritance_model_Person_firm_autoMapped_firm');
  assertContains($result.mappedEntities.path, 'semi_structured_generated_embedded_inheritance_model_Person_firm_autoMapped_firm_address');
  assertContains($result.mappedEntities.path, 'semi_structured_generated_embedded_inheritance_model_Person_firm_autoMapped_firm_address_street');
}

###Relational
Database meta::analytics::mapping::modelCoverage::test::sampleDB
(
  Table FirmTable
  (
    id INTEGER PRIMARY KEY,
    legalName VARCHAR(200)
  )
  Table PersonTable
  (
    id INTEGER PRIMARY KEY,
    firmID INTEGER,
    firstName VARCHAR(200),
    lastName VARCHAR(200)
  )
  Table AddressTable
  (
    id INTEGER PRIMARY KEY,
    firmID INTEGER,
    name VARCHAR(200)
  )

  Join firm_person(PersonTable.firmID = FirmTable.id)
  Join firm_address(AddressTable.firmID = FirmTable.id)
)


###Pure
Enum meta::analytics::mapping::modelCoverage::test::IncType
{
  Corp,
  LLC
}

Class meta::analytics::mapping::modelCoverage::test::LegalEntity
{
  legalName: String[1];
  address: meta::analytics::mapping::modelCoverage::test::Address[1];
}

Class meta::analytics::mapping::modelCoverage::test::Firm extends meta::analytics::mapping::modelCoverage::test::LegalEntity
{
  id: Decimal[1];
  employees: meta::analytics::mapping::modelCoverage::test::Person[1..*];
  incType: meta::analytics::mapping::modelCoverage::test::IncType[1];
  employeeSize() {$this.employees->count()}: Number[1];
}

Class meta::analytics::mapping::modelCoverage::test::Person
{
  firstName: String[1];
  lastName: String[1];
}

Class meta::analytics::mapping::modelCoverage::test::Address
{
  zipcode: Integer[1];
}

Class meta::analytics::mapping::modelCoverage::test::Street extends meta::analytics::mapping::modelCoverage::test::Address
{
  streetName: String[1];
}

Class meta::analytics::mapping::modelCoverage::test::_LegalEntity
{
  legalName: String[1];
  address: meta::analytics::mapping::modelCoverage::test::Address[1];
}

Class meta::analytics::mapping::modelCoverage::test::_Firm
{
  id: Decimal[1];
  employees: meta::analytics::mapping::modelCoverage::test::_Person[1..*];
  type: meta::analytics::mapping::modelCoverage::test::IncType[1];
}

Class meta::analytics::mapping::modelCoverage::test::_Person
{
  fullName: String[1];
}

Class meta::analytics::mapping::modelCoverage::test::_Street
{
  streetName: String[1];
}



###Mapping
Mapping meta::analytics::mapping::modelCoverage::test::sampleRelationalMapping
(
  *meta::analytics::mapping::modelCoverage::test::Firm: Relational
  {
    ~primaryKey
    (
      [meta::analytics::mapping::modelCoverage::test::sampleDB]FirmTable.id
    )
    ~mainTable [meta::analytics::mapping::modelCoverage::test::sampleDB]FirmTable
    id: [meta::analytics::mapping::modelCoverage::test::sampleDB]FirmTable.id,
    employees
    (
      firstName: [meta::analytics::mapping::modelCoverage::test::sampleDB]PersonTable.firstName
    ),
    address: [meta::analytics::mapping::modelCoverage::test::sampleDB]@firm_address
  }
  *meta::analytics::mapping::modelCoverage::test::Person: Relational
  {
    ~primaryKey
    (
      [meta::analytics::mapping::modelCoverage::test::sampleDB]PersonTable.id
    )
    ~mainTable [meta::analytics::mapping::modelCoverage::test::sampleDB]PersonTable
    firstName: [meta::analytics::mapping::modelCoverage::test::sampleDB]PersonTable.firstName,
    lastName: [meta::analytics::mapping::modelCoverage::test::sampleDB]PersonTable.lastName
  }
  *meta::analytics::mapping::modelCoverage::test::LegalEntity: Operation
  {
    meta::pure::router::operations::inheritance_OperationSetImplementation_1__SetImplementation_MANY_()
  }
  *meta::analytics::mapping::modelCoverage::test::Address: Operation
  {
    meta::pure::router::operations::inheritance_OperationSetImplementation_1__SetImplementation_MANY_()
  }
  *meta::analytics::mapping::modelCoverage::test::Street: Operation
  {
    meta::pure::router::operations::union_OperationSetImplementation_1__SetImplementation_MANY_(s1,s2)
  }
  meta::analytics::mapping::modelCoverage::test::Street[s2]: Relational
  {
    ~primaryKey
    (
      [meta::analytics::mapping::modelCoverage::test::sampleDB]AddressTable.id
    )
    ~mainTable [meta::analytics::mapping::modelCoverage::test::sampleDB]AddressTable
    zipcode: [meta::analytics::mapping::modelCoverage::test::sampleDB]AddressTable.id
  }
  meta::analytics::mapping::modelCoverage::test::Street[s1]: Relational
  {
    ~primaryKey
    (
      [meta::analytics::mapping::modelCoverage::test::sampleDB]AddressTable.id
    )
    ~mainTable [meta::analytics::mapping::modelCoverage::test::sampleDB]AddressTable
    zipcode: [meta::analytics::mapping::modelCoverage::test::sampleDB]AddressTable.id
  }
)

###Mapping
Mapping meta::analytics::mapping::modelCoverage::test::sampleModelToModelMapping
(
  meta::analytics::mapping::modelCoverage::test::_Person: Pure
  {
    ~src meta::analytics::mapping::modelCoverage::test::Person
    fullName: 'Full Name'
  }
  meta::analytics::mapping::modelCoverage::test::_LegalEntity: Pure
  {
    ~src meta::analytics::mapping::modelCoverage::test::LegalEntity
    legalName: $src.legalName
  }
  meta::analytics::mapping::modelCoverage::test::_Firm: Pure
  {
    ~src meta::analytics::mapping::modelCoverage::test::Firm
    employees: $src.employees
  }
  *meta::analytics::mapping::modelCoverage::test::_Street: Operation
  {
    meta::pure::router::operations::union_OperationSetImplementation_1__SetImplementation_MANY_(s1,s2)
  }
  meta::analytics::mapping::modelCoverage::test::_Street[s2]: Pure
  {
    ~src meta::analytics::mapping::modelCoverage::test::Street
    streetName: $src.streetName + '2'
  }
  meta::analytics::mapping::modelCoverage::test::_Street[s1]: Pure
  {
    ~src meta::analytics::mapping::modelCoverage::test::Street
    streetName: $src.streetName + '1'
  }
)




© 2015 - 2025 Weber Informatics LLC | Privacy Policy