Implementation
String genEDNetTest(CoreRepository repo, Model model, Concept entryConcept) {
Domain domain = model.domain;
final repoName = '${domain.codeFirstLetterUpper}${model.codeFirstLetterUpper}Repo';
var sc = ' \n';
sc = '$sc// test/${domain.codeLowerUnderscore}/'
'${model.codeLowerUnderscore}/${domain.codeLowerUnderscore}_'
'${model.codeLowerUnderscore}_${entryConcept.codeLowerUnderscore}_'
'test.dart \n';
sc = '$sc \n';
sc = '${sc}import \'package:test/test.dart\'; \n';
sc = '${sc}import \'package:ednet_core/ednet_core.dart\'; \n';
sc = '${sc}import \'../../../lib/${domain.codeLowerUnderscore}_'
'${model.codeLowerUnderscore}.dart\'; \n';
sc = '$sc \n';
var entities = entryConcept.codePluralFirstLetterLower;
var entity = entryConcept.codeFirstLetterLower;
var entity2 = entryConcept.code;
var entities2 = entryConcept.codePluralFirstLetterUpper;
//var entityConcept = '${entities}.concept';
sc = '${sc}void test${domain.code}${model.code}'
'${entryConcept.codePluralFirstLetterUpper}( \n';
sc = '$sc ${domain.code}Domain ${domain.codeFirstLetterLower}Domain, '
'${model.code}Model ${model.codeFirstLetterLower}Model, '
'$entities2 $entities) { \n';
sc = '$sc DomainSession session; \n';
sc = '$sc group(\'Testing ${domain.code}.${model.code}.$entity2\', () { \n';
sc = '$sc session = ${domain.codeFirstLetterLower}Domain.newSession(); \n';
//sc = '${sc} expect(${model.codeFirstLetterLower}Model.isEmpty, isTrue); \n';
sc = '$sc setUp(() { \n';
sc = '$sc ${model.codeFirstLetterLower}Model.init(); \n';
sc = '$sc }); \n';
sc = '$sc tearDown(() { \n';
sc = '$sc ${model.codeFirstLetterLower}Model.clear(); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Not empty model\', () { \n';
sc = '$sc expect(${model.codeFirstLetterLower}Model.isEmpty, '
'isFalse); \n';
sc = '$sc expect($entities.isEmpty, isFalse); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Empty model\', () { \n';
sc = '$sc ${model.codeFirstLetterLower}Model.clear(); \n';
sc = '$sc expect(${model.codeFirstLetterLower}Model.isEmpty, '
'isTrue); \n';
sc = '$sc expect($entities.isEmpty, isTrue); \n';
sc = '$sc expect($entities.exceptions.isEmpty, isTrue); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'From model to JSON\', () { \n';
sc = '$sc final json = ${model.codeFirstLetterLower}Model.toJson(); \n';
sc = '$sc expect(json, isNotNull); \n';
sc = '$sc \n';
sc = '$sc print(json); \n';
sc = '$sc //${model.codeFirstLetterLower}Model.displayJson(); \n';
sc = '$sc //${model.codeFirstLetterLower}Model.display(); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'From JSON to model\', () { \n';
sc = '$sc final json = ${model.codeFirstLetterLower}Model.toJson(); \n';
sc = '$sc ${model.codeFirstLetterLower}Model.clear(); \n';
sc = '$sc expect(${model.codeFirstLetterLower}Model.isEmpty, '
'isTrue); \n';
sc = '$sc ${model.codeFirstLetterLower}Model.fromJson(json); \n';
sc = '$sc expect(${model.codeFirstLetterLower}Model.isEmpty, '
'isFalse); \n';
sc = '$sc \n';
sc = '$sc ${model.codeFirstLetterLower}Model.display(); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'From model entry to JSON\', () { \n';
sc = '$sc final json = ${model.codeFirstLetterLower}Model.'
'fromEntryToJson(\'$entity2\'); \n';
sc = '$sc expect(json, isNotNull); \n';
sc = '$sc \n';
sc = '$sc print(json); \n';
sc = '$sc //${model.codeFirstLetterLower}Model.'
'displayEntryJson(\'$entity2\'); \n';
sc = '$sc //${model.codeFirstLetterLower}Model.displayJson(); \n';
sc = '$sc //${model.codeFirstLetterLower}Model.display(); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'From JSON to model entry\', () { \n';
sc = '$sc final json = ${model.codeFirstLetterLower}Model.'
'fromEntryToJson(\'$entity2\'); \n';
sc = '$sc $entities.clear(); \n';
sc = '$sc expect($entities.isEmpty, isTrue); \n';
sc = '$sc ${model.codeFirstLetterLower}Model.fromJsonToEntry(json); \n';
sc = '$sc expect($entities.isEmpty, isFalse); \n';
sc = '$sc \n';
sc = '$sc $entities.display(title: \'From JSON to model entry\'); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Add $entity required error\', () { \n';
var requiredNonIdAttribute = findRequiredNonIdAttribute(entryConcept);
if (requiredNonIdAttribute != null) {
sc = '$sc final ${entity}Concept = $entities.concept; \n';
sc = '$sc var ${entity}Count = $entities.length; \n';
sc = '$sc final $entity = $entity2(${entity}Concept); \n';
sc = '$sc final isAdded = $entities.add($entity); \n';
sc = '$sc expect(isAdded, isFalse); \n';
sc = '$sc expect($entities.length, equals(${entity}Count)); \n';
sc = '$sc expect($entities.exceptions.length, greaterThan(0)); \n';
sc = '$sc expect($entities.exceptions.toList()[0].category, '
'equals(\'required\')); \n';
sc = '$sc \n';
sc = '$sc $entities.exceptions.display(title: \'Add $entity required '
'error\'); \n';
} else {
sc = '$sc // no required attribute that is not id \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Add $entity unique error\', () { \n';
var idAttribute = findIdAttribute(entryConcept);
if (idAttribute != null) {
if (idAttribute.increment == null) {
sc = '$sc final ${entity}Concept = $entities.concept; \n';
sc = '$sc var ${entity}Count = $entities.length; \n';
sc = '$sc final $entity = $entity2(${entity}Concept); \n';
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc $entity.${idAttribute.code} = '
'random$entity2.${idAttribute.code}; \n';
sc = '$sc final added = $entities.add($entity); \n';
sc = '$sc expect(added, isFalse); \n';
sc = '$sc expect($entities.length, equals(${entity}Count)); \n';
sc = '$sc expect($entities.exceptions.length, greaterThan(0)); \n';
sc = '$sc \n';
sc = '$sc $entities.exceptions.display(title: \'Add $entity unique '
'error\'); \n';
} else {
sc = '$sc // id attribute defined as increment, cannot update it \n';
}
} else {
sc = '$sc // no id attribute \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Not found $entity by oid\', () { \n';
sc = '$sc final ednetOid = Oid.ts(1345648254063); \n';
sc = '$sc final $entity = $entities.singleWhereOid(ednetOid); \n';
sc = '$sc expect($entity, isNull); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Find $entity by oid\', () { \n';
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final $entity = '
'$entities.singleWhereOid(random$entity2.oid); \n';
sc = '$sc expect($entity, isNotNull); \n';
sc = '$sc expect($entity, equals(random$entity2)); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Find $entity by attribute id\', () { \n';
if (idAttribute != null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final $entity = \n';
sc = '$sc $entities.singleWhereAttributeId('
'\'${idAttribute.code}\', random$entity2.${idAttribute.code}); \n';
sc = '$sc expect($entity, isNotNull); \n';
sc = '$sc expect($entity!.${idAttribute.code}, '
'equals(random$entity2.${idAttribute.code})); \n';
} else {
sc = '$sc // no id attribute \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Find $entity by required attribute\', () { \n';
if (requiredNonIdAttribute != null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final $entity = \n';
sc = '$sc $entities.firstWhereAttribute('
'\'${requiredNonIdAttribute.code}\', '
'random$entity2.${requiredNonIdAttribute.code}); \n';
sc = '$sc expect($entity, isNotNull); \n';
sc = '$sc expect($entity.${requiredNonIdAttribute.code}, '
'equals(random$entity2.${requiredNonIdAttribute.code})); \n';
} else {
sc = '$sc // no required attribute that is not id \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Find $entity by attribute\', () { \n';
var nonRequiredAttribute = findNonRequiredAttribute(entryConcept);
if (nonRequiredAttribute != null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final $entity = \n';
sc = '$sc $entities.firstWhereAttribute('
'\'${nonRequiredAttribute.code}\', random$entity2.'
'${nonRequiredAttribute.code}); \n';
sc = '$sc expect($entity, isNotNull); \n';
sc = '$sc expect($entity.${nonRequiredAttribute.code}, '
'equals(random$entity2.${nonRequiredAttribute.code})); \n';
} else {
sc = '$sc // no attribute that is not required \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Select $entities by attribute\', () { \n';
if (nonRequiredAttribute != null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final selected$entities2 = \n';
sc = '$sc $entities.selectWhereAttribute('
'\'${nonRequiredAttribute.code}\', random$entity2.'
'${nonRequiredAttribute.code}); \n';
sc = '$sc expect(selected$entities2.isEmpty, isFalse); \n';
sc = '$sc for (final se in selected$entities2) {';
sc = '$sc expect(se.${nonRequiredAttribute.code}, equals(random$entity2.${nonRequiredAttribute.code}));';
sc = '$sc }';
sc = '$sc \n';
sc = '$sc //selected$entities2.display(title: \'Select $entities by '
'${nonRequiredAttribute.code}\'); \n';
} else {
sc = '$sc // no attribute that is not required \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Select $entities by required attribute\', () { \n';
if (requiredNonIdAttribute != null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final selected$entities2 = \n';
sc = '$sc $entities.selectWhereAttribute('
'\'${requiredNonIdAttribute.code}\', '
'random$entity2.${requiredNonIdAttribute.code}); \n';
sc = '$sc expect(selected$entities2.isEmpty, isFalse); \n';
sc = '$sc selected$entities2.forEach((se) => \n';
sc = '$sc expect(se.${requiredNonIdAttribute.code}, '
'equals(random$entity2.${requiredNonIdAttribute.code}))); \n';
sc = '$sc \n';
sc = '$sc //selected$entities2.display(title: \'Select $entities by '
'${requiredNonIdAttribute.code}\'); \n';
} else {
sc = '$sc // no required attribute that is not id \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Select $entities by attribute, then add\', () { \n';
var nonIdAttribute = findNonIdAttribute(entryConcept);
if (nonIdAttribute != null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final selected$entities2 = \n';
sc = '$sc $entities.selectWhereAttribute('
'\'${nonIdAttribute.code}\', random$entity2.${nonIdAttribute.code}); \n';
sc = '$sc expect(selected$entities2.isEmpty, isFalse); \n';
sc = '$sc expect(selected$entities2.source?.isEmpty, isFalse); \n';
sc = '$sc var ${entities}Count = $entities.length; \n';
sc = '$sc \n';
sc = '$sc final $entity = $entity2($entities.concept) \n';
var attributesSet = setTestAttributesRandomly(entryConcept, entity);
sc = '$sc$attributesSet';
sc = '$sc final added = selected$entities2.add($entity); \n';
sc = '$sc expect(added, isTrue); \n';
sc = '$sc expect($entities.length, equals(++${entities}Count)); \n';
sc = '$sc \n';
sc = '$sc //selected$entities2.display(title: \n';
sc = '$sc // \'Select $entities by attribute, then add\'); \n';
sc = '$sc //$entities.display(title: \'All $entities\'); \n';
} else {
sc = '$sc // no attribute that is not id \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Select $entities by attribute, then remove\', () { \n';
if (nonIdAttribute != null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final selected$entities2 = \n';
sc = '$sc $entities.selectWhereAttribute('
'\'${nonIdAttribute.code}\', random$entity2.${nonIdAttribute.code}); \n';
sc = '$sc expect(selected$entities2.isEmpty, isFalse); \n';
sc = '$sc expect(selected$entities2.source?.isEmpty, isFalse); \n';
sc = '$sc var ${entities}Count = $entities.length; \n';
sc = '$sc \n';
sc = '$sc final removed = selected$entities2.remove(random$entity2); \n';
sc = '$sc expect(removed, isTrue); \n';
sc = '$sc expect($entities.length, equals(--${entities}Count)); \n';
sc = '$sc \n';
sc = '$sc random$entity2.display(prefix: \'removed\'); \n';
sc = '$sc //selected$entities2.display(title: \n';
sc = '$sc // \'Select $entities by attribute, then remove\'); \n';
sc = '$sc //$entities.display(title: \'All $entities\'); \n';
} else {
sc = '$sc // no attribute that is not id \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Sort $entities\', () { \n';
if (idAttribute != null) {
sc = '$sc $entities.sort(); \n';
sc = '$sc \n';
sc = '$sc //$entities.display(title: \'Sort $entities\'); \n';
} else {
sc = '$sc // no id attribute \n';
sc = '$sc // add compareTo method in the specific $entity2 class \n';
sc = '$sc /* \n';
sc = '$sc $entities.sort(); \n';
sc = '$sc \n';
sc = '$sc //$entities.display(title: \'Sort $entities\'); \n';
sc = '$sc */ \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Order $entities\', () { \n';
if (idAttribute != null) {
sc = '$sc final ordered$entities2 = $entities.order(); \n';
sc = '$sc expect(ordered$entities2.isEmpty, isFalse); \n';
sc = '$sc expect(ordered$entities2.length, '
'equals($entities.length)); \n';
sc = '$sc expect(ordered$entities2.source?.isEmpty, isFalse); \n';
sc = '$sc expect(ordered$entities2.source?.length, '
'equals($entities.length)); \n';
sc = '$sc expect(ordered$entities2, isNot(same($entities))); \n';
sc = '$sc \n';
sc = '$sc //ordered$entities2.display(title: \'Order $entities\'); \n';
} else {
sc = '$sc // no id attribute \n';
sc = '$sc // add compareTo method in the specific $entity2 class \n';
sc = '$sc /* \n';
sc = '$sc final ordered$entities2 = $entities.order(); \n';
sc = '$sc expect(ordered$entities2.isEmpty, isFalse); \n';
sc = '$sc expect(ordered$entities2.length, '
'equals($entities.length)); \n';
sc = '$sc expect(ordered$entities2.source?.isEmpty, isFalse); \n';
sc = '$sc expect(ordered$entities2.source?.length, '
'equals($entities.length)); \n';
sc = '$sc expect(ordered$entities2, isNot(same($entities))); \n';
sc = '$sc \n';
sc = '$sc //ordered$entities2.display(title: \'Order $entities\'); \n';
sc = '$sc */ \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Copy $entities\', () { \n';
sc = '$sc final copied$entities2 = $entities.copy(); \n';
sc = '$sc expect(copied$entities2.isEmpty, isFalse); \n';
sc = '$sc expect(copied$entities2.length, '
'equals($entities.length)); \n';
sc = '$sc expect(copied$entities2, isNot(same($entities))); \n';
sc = '$sc for (final e in copied$entities2) {';
sc = '$sc expect(e, equals($entities.singleWhereOid(e.oid)));';
sc = '$sc }';
sc = '$sc \n';
if (entryConcept.hasId) {
sc = '$sc for (final e in copied$entities2) {';
sc = '$sc expect(e, isNot(same($entities.singleWhereId(e.id!))));';
sc = '$sc }';
}
sc = '$sc \n';
sc = '$sc //copied$entities2.display(title: "Copy $entities"); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'True for every $entity\', () { \n';
if (requiredNonIdAttribute != null) {
sc = '$sc expect($entities.every((e) => '
'e.${requiredNonIdAttribute.code} != null), isTrue); \n';
} else {
sc = '$sc // no required attribute that is not id \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Random $entity\', () { \n';
sc = '$sc final ${entity}1 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc expect(${entity}1, isNotNull); \n';
sc = '$sc final ${entity}2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc expect(${entity}2, isNotNull); \n';
sc = '$sc \n';
sc = '$sc //${entity}1.display(prefix: \'random1\'); \n';
sc = '$sc //${entity}2.display(prefix: \'random2\'); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Update $entity id with try\', () { \n';
if (idAttribute != null) {
if (idAttribute.increment == null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final beforeUpdate = random$entity2.${idAttribute.code}; \n';
sc = '$sc try { \n';
var attributeSet = setTestAttributeRandomly(idAttribute, 'random$entity2');
sc = '$sc random$entity2$attributeSet;';
sc = '$sc } on UpdateException catch (e) { \n';
sc = '$sc expect(random$entity2.${idAttribute.code}, '
'equals(beforeUpdate)); \n';
sc = '$sc } \n';
} else {
sc = '$sc // id attribute defined as increment, cannot update it \n';
}
} else {
sc = '$sc // no id attribute \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Update $entity id without try\', () { \n';
if (idAttribute != null) {
if (idAttribute.increment == null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final beforeUpdateValue = '
'random$entity2.${idAttribute.code}; \n';
var value = genAttributeTextRandomly(idAttribute);
sc = '$sc expect(() => random$entity2.${idAttribute.code} = '
'$value, throws); \n';
sc = '$sc expect(random$entity2.${idAttribute.code}, '
'equals(beforeUpdateValue)); \n';
} else {
sc = '$sc // id attribute defined as increment, cannot update it \n';
}
} else {
sc = '$sc // no id attribute \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Update $entity id with success\', () { \n';
if (idAttribute != null) {
if (idAttribute.increment == null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final afterUpdateEntity = random$entity2.copy(); \n';
sc = '$sc final attribute = random$entity2.concept.attributes.'
'singleWhereCode(\'${idAttribute.code}\'); \n';
sc = '$sc expect(attribute?.update, isFalse); \n';
sc = '$sc attribute?.update = true; \n';
var value = genAttributeTextRandomly(idAttribute);
sc = '$sc afterUpdateEntity.${idAttribute.code} = $value; \n';
sc = '$sc expect(afterUpdateEntity.${idAttribute.code}, '
'equals($value)); \n';
sc = '$sc attribute?.update = false; \n';
sc = '$sc final updated = $entities.update(random$entity2, '
'afterUpdateEntity); \n';
sc = '$sc expect(updated, isTrue); \n';
sc = '$sc \n';
sc = '$sc final entity = $entities.singleWhereAttributeId('
'\'${idAttribute.code}\', $value); \n';
sc = '$sc expect(entity, isNotNull); \n';
sc = '$sc expect(entity!.${idAttribute.code}, equals($value)); \n';
sc = '$sc \n';
sc = '$sc //$entities.display(\'After update $entity id\'); \n';
} else {
sc = '$sc // id attribute defined as increment, cannot update it \n';
}
} else {
sc = '$sc // no id attribute \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Update $entity non id attribute with failure\', () { \n';
if (nonIdAttribute != null) {
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
//sc = '${sc} var beforeUpdateValue = '
// 'random${Entity}.${nonIdAttribute.code}; \n';
var value = genAttributeTextRandomly(nonIdAttribute);
sc = '$sc final afterUpdateEntity = random$entity2.copy()..${nonIdAttribute.code} = $value; \n';
sc = '$sc expect(afterUpdateEntity.${nonIdAttribute.code}, '
'equals($value)); \n';
sc = '$sc // $entities.update can only be used if oid, code or '
'id is set. \n';
sc = '$sc expect(() => $entities.update(random$entity2, '
'afterUpdateEntity), throwsA(isA<Exception>())); \n';
} else {
sc = '$sc // no attribute that is not id \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Copy Equality\', () { \n';
sc = '$sc final random$entity2 = ${model.codeFirstLetterLower}Model.$entities.random()..display(prefix:\'before copy: \'); \n';
sc = '$sc final random${entity2}Copy = random$entity2.copy()..display(prefix:\'after copy: \'); \n';
sc = '$sc expect(random$entity2, equals(random${entity2}Copy)); \n';
sc = '$sc expect(random$entity2.oid, equals(random${entity2}Copy.oid)); \n';
sc = '$sc expect(random$entity2.code, '
'equals(random${entity2}Copy.code)); \n';
for (Attribute attribute in entryConcept.attributes.whereType<Attribute>()) {
sc = '$sc expect(random$entity2.${attribute.code}, '
'equals(random${entity2}Copy.${attribute.code})); \n';
}
sc = '$sc \n';
if (idAttribute != null) {
sc = '$sc expect(random$entity2.id, isNotNull); \n';
sc = '$sc expect(random${entity2}Copy.id, isNotNull); \n';
sc = '$sc expect(random$entity2.id, equals(random${entity2}Copy.id)); \n';
sc = '$sc \n';
sc = '$sc var idsEqual = false; \n';
sc = '$sc if (random$entity2.id == random${entity2}Copy.id) { \n';
sc = '$sc idsEqual = true; \n';
sc = '$sc } \n';
sc = '$sc expect(idsEqual, isTrue); \n';
sc = '$sc \n';
sc = '$sc idsEqual = false; \n';
sc = '$sc if (random$entity2.id!.equals(random${entity2}Copy.id!)) { \n';
sc = '$sc idsEqual = true; \n';
sc = '$sc } \n';
sc = '$sc expect(idsEqual, isTrue); \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'$entity action undo and redo\', () { \n';
//sc = '${sc} final ${entity}Concept = ${entities}.concept; \n';
sc = '$sc var ${entity}Count = $entities.length; \n';
sc = '$sc ${createTestEntryEntityRandomly(entryConcept, withChildren: false, model: model)}';
sc = '$sc expect($entities.length, equals(++${entity}Count)); \n';
sc = '$sc $entities.remove($entity); \n';
sc = '$sc expect($entities.length, equals(--${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc final action = AddCommand(session, $entities, $entity)..doIt(); \n';
sc = '$sc expect($entities.length, equals(++${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc action.undo(); \n';
sc = '$sc expect($entities.length, equals(--${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc action.redo(); \n';
sc = '$sc expect($entities.length, equals(++${entity}Count)); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'$entity session undo and redo\', () { \n';
//sc = '${sc} final ${entity}Concept = ${entities}.concept; \n';
sc = '$sc var ${entity}Count = $entities.length; \n';
sc = '$sc ${createTestEntryEntityRandomly(entryConcept, withChildren: false, model: model)}';
sc = '$sc expect($entities.length, equals(++${entity}Count)); \n';
sc = '$sc $entities.remove($entity); \n';
sc = '$sc expect($entities.length, equals(--${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc AddCommand(session, $entities, $entity).doIt();; \n';
sc = '$sc expect($entities.length, equals(++${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc session.past.undo(); \n';
sc = '$sc expect($entities.length, equals(--${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc session.past.redo(); \n';
sc = '$sc expect($entities.length, equals(++${entity}Count)); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'$entity2 update undo and redo\', () { \n';
if (nonIdAttribute != null) {
sc = '$sc final $entity = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
var value = genAttributeTextRandomly(nonIdAttribute);
sc = '$sc final action = SetAttributeCommand(session, '
'$entity, \'${nonIdAttribute.code}\', $value)..doIt(); \n';
sc = '$sc \n';
sc = '$sc session.past.undo(); \n';
sc = '$sc expect($entity.${nonIdAttribute.code}, '
'equals(action.before)); \n';
sc = '$sc \n';
sc = '$sc session.past.redo(); \n';
sc = '$sc expect($entity.${nonIdAttribute.code}, '
'equals(action.after)); \n';
} else {
sc = '$sc // no attribute that is not id \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'$entity2 action with multiple undos and redos\', () { \n';
sc = '$sc var ${entity}Count = $entities.length; \n';
sc = '$sc final ${entity}1 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc \n';
sc = '$sc RemoveCommand(session, $entities, '
'${entity}1).doIt(); \n';
sc = '$sc expect($entities.length, equals(--${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc final ${entity}2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc \n';
sc = '$sc RemoveCommand(session, $entities, '
'${entity}2).doIt(); \n';
sc = '$sc expect($entities.length, equals(--${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc //session.past.display(); \n';
sc = '$sc \n';
sc = '$sc session.past.undo(); \n';
sc = '$sc expect($entities.length, equals(++${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc session.past.undo(); \n';
sc = '$sc expect($entities.length, equals(++${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc //session.past.display(); \n';
sc = '$sc \n';
sc = '$sc session.past.redo(); \n';
sc = '$sc expect($entities.length, equals(--${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc session.past.redo(); \n';
sc = '$sc expect($entities.length, equals(--${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc //session.past.display(); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Transaction undo and redo\', () { \n';
sc = '$sc var ${entity}Count = $entities.length; \n';
sc = '$sc final ${entity}1 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc var ${entity}2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc while (${entity}1 == ${entity}2) { \n';
sc = '$sc ${entity}2 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc } \n';
sc = '$sc final action1 = RemoveCommand(session, $entities, '
'${entity}1); \n';
sc = '$sc final action2 = RemoveCommand(session, $entities, '
'${entity}2); \n';
sc = '$sc \n';
sc = '$sc Transaction(\'two removes on $entities\', session) \n';
sc = '$sc ..add(action1) \n';
sc = '$sc ..add(action2) \n';
sc = '$sc ..doIt(); \n';
sc = '$sc ${entity}Count = ${entity}Count - 2; \n';
sc = '$sc expect($entities.length, equals(${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc $entities.display(title:\'Transaction Done\'); \n';
sc = '$sc \n';
sc = '$sc session.past.undo(); \n';
sc = '$sc ${entity}Count = ${entity}Count + 2; \n';
sc = '$sc expect($entities.length, equals(${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc $entities.display(title:\'Transaction Undone\'); \n';
sc = '$sc \n';
sc = '$sc session.past.redo(); \n';
sc = '$sc ${entity}Count = ${entity}Count - 2; \n';
sc = '$sc expect($entities.length, equals(${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc $entities.display(title:\'Transaction Redone\'); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Transaction with one action error\', () { \n';
sc = '$sc final ${entity}Count = $entities.length; \n';
sc = '$sc final ${entity}1 = ${model.codeFirstLetterLower}Model.$entities.random(); \n';
sc = '$sc final ${entity}2 = ${entity}1; \n';
sc = '$sc final action1 = RemoveCommand(session, $entities, '
'${entity}1); \n';
sc = '$sc final action2 = RemoveCommand(session, $entities, '
'${entity}2); \n';
sc = '$sc \n';
sc = '$sc final transaction = Transaction( \n';
sc = '$sc \'two removes on $entities, with an error on the second\',\n';
sc = '$sc session, \n';
sc = '$sc )\n';
sc = '$sc ..add(action1) \n';
sc = '$sc ..add(action2); \n';
sc = '$sc final done = transaction.doIt(); \n';
sc = '$sc expect(done, isFalse); \n';
sc = '$sc expect($entities.length, equals(${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc //$entities.display(title:\'Transaction with an error\'); \n';
sc = '$sc }); \n';
sc = '$sc \n';
sc = '$sc test(\'Reactions to $entity actions\', () { \n';
//sc = '${sc} final ${entity}Concept = ${entities}.concept; \n';
sc = '$sc var ${entity}Count = $entities.length; \n';
sc = '$sc \n';
sc = '$sc final reaction = ${entity2}Reaction(); \n';
sc = '$sc expect(reaction, isNotNull); \n';
sc = '$sc \n';
sc = '$sc ${domain.codeFirstLetterLower}Domain.startCommandReaction(reaction); \n';
sc = '$sc ${createTestEntryEntityRandomly(entryConcept, withChildren: false, model: model)}';
sc = '$sc expect($entities.length, equals(++${entity}Count)); \n';
sc = '$sc $entities.remove($entity); \n';
sc = '$sc expect($entities.length, equals(--${entity}Count)); \n';
sc = '$sc \n';
sc = '$sc final session = ${domain.codeFirstLetterLower}Domain.newSession(); \n';
sc = '$sc AddCommand(session, $entities, '
'$entity).doIt(); \n';
sc = '$sc expect($entities.length, equals(++${entity}Count)); \n';
sc = '$sc expect(reaction.reactedOnAdd, isTrue); \n';
sc = '$sc \n';
if (nonIdAttribute != null) {
var value = genAttributeTextRandomly(nonIdAttribute);
sc = '$sc SetAttributeCommand( \n';
sc = '$sc session,\n';
sc = '$sc $entity,\n';
sc = '$sc \'${nonIdAttribute.code}\',\n';
sc = '$sc $value,\n';
sc = '$sc ).doIt();\n';
sc = '$sc expect(reaction.reactedOnUpdate, isTrue); \n';
sc = '$sc ${domain.codeFirstLetterLower}Domain.cancelCommandReaction(reaction); \n';
} else {
sc = '$sc // no attribute that is not id \n';
}
sc = '$sc }); \n';
sc = '$sc \n';
// after the last test
sc = '$sc }); \n';
sc = '$sc} \n';
sc = '$sc \n';
sc = '${sc}class ${entity2}Reaction implements ICommandReaction { \n';
sc = '$sc bool reactedOnAdd = false; \n';
sc = '$sc bool reactedOnUpdate = false; \n';
sc = '$sc \n';
sc = '$sc @override';
sc = '$sc void react(ICommand action) { \n';
sc = '$sc if (action is IEntitiesCommand) { \n';
sc = '$sc reactedOnAdd = true; \n';
sc = '$sc } else if (action is IEntityCommand) { \n';
sc = '$sc reactedOnUpdate = true; \n';
sc = '$sc } \n';
sc = '$sc } \n';
sc = '$sc} \n';
sc = '$sc \n';
sc = '${sc}void main() { \n';
sc = '$sc final repository = $repoName(); \n';
sc = '$sc final ${domain.codeFirstLetterLower}Domain = '
'repository.getDomainModels(\'${domain.code}\') as ${domain.code}Domain?;\n';
sc = '$sc assert(${domain.codeFirstLetterLower}Domain != null, \'${domain.code}Domain is not defined\'); \n';
sc = '$sc final ${model.codeFirstLetterLower}Model = '
'${domain.codeFirstLetterLower}Domain!.getModelEntries(\'${model.code}\') as ${model.code}Model?;\n';
sc = '$sc assert(${model.codeFirstLetterLower}Model != null, \'${model.code}Model is not defined\'); \n';
sc = '$sc final $entities = '
'${model.codeFirstLetterLower}Model!.$entities; \n';
sc = '$sc test${domain.code}${model.code}'
'${entryConcept.codePluralFirstLetterUpper}('
'${domain.codeFirstLetterLower}Domain, '
'${model.codeFirstLetterLower}Model, $entities); \n';
sc = '$sc} \n';
sc = '$sc \n';
return sc;
}