Search in sources :

Example 1 with ConceptMapGroup

use of com.vaticle.typedb.core.concept.answer.ConceptMapGroup in project grakn by graknlabs.

the class TypeQLSteps method answer_groups_are.

@Then("answer groups are")
public void answer_groups_are(List<Map<String, String>> answerIdentifierTable) {
    Set<AnswerIdentifierGroup> answerIdentifierGroups = answerIdentifierTable.stream().collect(Collectors.groupingBy(x -> x.get(AnswerIdentifierGroup.GROUP_COLUMN_NAME))).values().stream().map(AnswerIdentifierGroup::new).collect(Collectors.toSet());
    assertEquals(String.format("Expected [%d] answer groups, but found [%d].", answerIdentifierGroups.size(), answerGroups.size()), answerIdentifierGroups.size(), answerGroups.size());
    for (AnswerIdentifierGroup answerIdentifierGroup : answerIdentifierGroups) {
        String[] identifier = answerIdentifierGroup.ownerIdentifier.split(":", 2);
        UniquenessCheck checker;
        switch(identifier[0]) {
            case "label":
                checker = new LabelUniquenessCheck(identifier[1]);
                break;
            case "key":
                checker = new KeyUniquenessCheck(identifier[1]);
                break;
            case "value":
                checker = new ValueUniquenessCheck(identifier[1]);
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + identifier[0]);
        }
        ConceptMapGroup answerGroup = answerGroups.stream().filter(ag -> checker.check(ag.owner())).findAny().orElse(null);
        assertNotNull(String.format("The group identifier [%s] does not match any of the answer group owners.", answerIdentifierGroup.ownerIdentifier), answerGroup);
        List<Map<String, String>> answersIdentifiers = answerIdentifierGroup.answersIdentifiers;
        for (ConceptMap answer : answerGroup.conceptMaps()) {
            List<Map<String, String>> matchingIdentifiers = new ArrayList<>();
            for (Map<String, String> answerIdentifiers : answersIdentifiers) {
                if (matchAnswerConcept(answerIdentifiers, answer)) {
                    matchingIdentifiers.add(answerIdentifiers);
                }
            }
            assertEquals(String.format("An identifier entry (row) should match 1-to-1 to an answer, but there were [%d] matching identifier entries for answer with variables %s.", matchingIdentifiers.size(), answer.concepts().keySet().toString()), 1, matchingIdentifiers.size());
        }
    }
}
Also used : Then(io.cucumber.java.en.Then) LocalDateTime(java.time.LocalDateTime) TypeQLDelete(com.vaticle.typeql.lang.query.TypeQLDelete) TypeQLInsert(com.vaticle.typeql.lang.query.TypeQLInsert) HashMap(java.util.HashMap) TypeQLUndefine(com.vaticle.typeql.lang.query.TypeQLUndefine) Reference(com.vaticle.typeql.lang.pattern.variable.Reference) ArrayList(java.util.ArrayList) Concept(com.vaticle.typedb.core.concept.Concept) Matcher(java.util.regex.Matcher) Given(io.cucumber.java.en.Given) Map(java.util.Map) TypeQLDefine(com.vaticle.typeql.lang.query.TypeQLDefine) TypeQL(com.vaticle.typeql.lang.TypeQL) When(io.cucumber.java.en.When) Assert.assertNotNull(org.junit.Assert.assertNotNull) Set(java.util.Set) Assert.assertTrue(org.junit.Assert.assertTrue) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) NumericGroup(com.vaticle.typedb.core.concept.answer.NumericGroup) Collectors(java.util.stream.Collectors) Util.assertThrows(com.vaticle.typedb.core.common.test.Util.assertThrows) TypeQLException(com.vaticle.typeql.lang.common.exception.TypeQLException) DateTimeParseException(java.time.format.DateTimeParseException) List(java.util.List) TypeQLUpdate(com.vaticle.typeql.lang.query.TypeQLUpdate) Attribute(com.vaticle.typedb.core.concept.thing.Attribute) LocalDate(java.time.LocalDate) Pattern(java.util.regex.Pattern) Util.assertThrowsWithMessage(com.vaticle.typedb.core.common.test.Util.assertThrowsWithMessage) ScenarioDefinitionException(com.vaticle.typedb.core.test.behaviour.exception.ScenarioDefinitionException) TypeQLMatch(com.vaticle.typeql.lang.query.TypeQLMatch) ConceptMapGroup(com.vaticle.typedb.core.concept.answer.ConceptMapGroup) Numeric(com.vaticle.typedb.core.concept.answer.Numeric) ConnectionSteps.tx(com.vaticle.typedb.core.test.behaviour.connection.ConnectionSteps.tx) Assert.assertEquals(org.junit.Assert.assertEquals) ConceptMapGroup(com.vaticle.typedb.core.concept.answer.ConceptMapGroup) ArrayList(java.util.ArrayList) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) HashMap(java.util.HashMap) Map(java.util.Map) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) Then(io.cucumber.java.en.Then)

Aggregations

Util.assertThrows (com.vaticle.typedb.core.common.test.Util.assertThrows)1 Util.assertThrowsWithMessage (com.vaticle.typedb.core.common.test.Util.assertThrowsWithMessage)1 Concept (com.vaticle.typedb.core.concept.Concept)1 ConceptMap (com.vaticle.typedb.core.concept.answer.ConceptMap)1 ConceptMapGroup (com.vaticle.typedb.core.concept.answer.ConceptMapGroup)1 Numeric (com.vaticle.typedb.core.concept.answer.Numeric)1 NumericGroup (com.vaticle.typedb.core.concept.answer.NumericGroup)1 Attribute (com.vaticle.typedb.core.concept.thing.Attribute)1 ConnectionSteps.tx (com.vaticle.typedb.core.test.behaviour.connection.ConnectionSteps.tx)1 ScenarioDefinitionException (com.vaticle.typedb.core.test.behaviour.exception.ScenarioDefinitionException)1 TypeQL (com.vaticle.typeql.lang.TypeQL)1 TypeQLException (com.vaticle.typeql.lang.common.exception.TypeQLException)1 Reference (com.vaticle.typeql.lang.pattern.variable.Reference)1 TypeQLDefine (com.vaticle.typeql.lang.query.TypeQLDefine)1 TypeQLDelete (com.vaticle.typeql.lang.query.TypeQLDelete)1 TypeQLInsert (com.vaticle.typeql.lang.query.TypeQLInsert)1 TypeQLMatch (com.vaticle.typeql.lang.query.TypeQLMatch)1 TypeQLUndefine (com.vaticle.typeql.lang.query.TypeQLUndefine)1 TypeQLUpdate (com.vaticle.typeql.lang.query.TypeQLUpdate)1 Given (io.cucumber.java.en.Given)1