From b916abf617484d172d22f14507dae88293bbd2e5 Mon Sep 17 00:00:00 2001 From: Martin Ledvinka Date: Thu, 19 Oct 2023 18:26:39 +0200 Subject: [PATCH] Add tests for UserAccountDao, fix issues. --- pom.xml | 12 ++- .../keycloak/provider/dao/UserAccountDao.java | 2 +- .../provider/dao/UserAccountDaoTest.java | 96 +++++++++++++++++++ 3 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 src/test/java/cz/cvut/kbss/keycloak/provider/dao/UserAccountDaoTest.java diff --git a/pom.xml b/pom.xml index 91eedd4..c171682 100644 --- a/pom.xml +++ b/pom.xml @@ -65,13 +65,21 @@ org.junit.jupiter junit-jupiter-api - ${junit.version} test org.junit.jupiter junit-jupiter-engine - ${junit.version} + test + + + org.mockito + mockito-core + test + + + org.mockito + mockito-junit-jupiter test diff --git a/src/main/java/cz/cvut/kbss/keycloak/provider/dao/UserAccountDao.java b/src/main/java/cz/cvut/kbss/keycloak/provider/dao/UserAccountDao.java index f769a51..7d89deb 100644 --- a/src/main/java/cz/cvut/kbss/keycloak/provider/dao/UserAccountDao.java +++ b/src/main/java/cz/cvut/kbss/keycloak/provider/dao/UserAccountDao.java @@ -49,7 +49,7 @@ private List generateUserMetadataStatements(KodiUserAccount userAccou vf.createLiteral(userAccount.getUsername())) )); if (vocabulary.getEmail() != null) { - statements.add(vf.createStatement(subject, vf.createIRI(vocabulary.getEmail()), vf.createIRI(userAccount.getEmail()))); + statements.add(vf.createStatement(subject, vf.createIRI(vocabulary.getEmail()), vf.createLiteral(userAccount.getEmail()))); } return statements; } diff --git a/src/test/java/cz/cvut/kbss/keycloak/provider/dao/UserAccountDaoTest.java b/src/test/java/cz/cvut/kbss/keycloak/provider/dao/UserAccountDaoTest.java new file mode 100644 index 0000000..d7baca8 --- /dev/null +++ b/src/test/java/cz/cvut/kbss/keycloak/provider/dao/UserAccountDaoTest.java @@ -0,0 +1,96 @@ +package cz.cvut.kbss.keycloak.provider.dao; + +import cz.cvut.kbss.keycloak.provider.model.KodiUserAccount; +import cz.cvut.kbss.keycloak.provider.model.Vocabulary; +import org.eclipse.rdf4j.model.IRI; +import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.model.impl.SimpleValueFactory; +import org.eclipse.rdf4j.model.vocabulary.FOAF; +import org.eclipse.rdf4j.model.vocabulary.RDF; +import org.eclipse.rdf4j.repository.RepositoryConnection; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.net.URI; +import java.util.UUID; + +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class UserAccountDaoTest { + + private static final ValueFactory vf = SimpleValueFactory.getInstance(); + + private final Vocabulary vocabulary = new Vocabulary(); + + @Mock + private RepositoryConnection connection; + + private UserAccountDao sut; + + @BeforeEach + void setUp() { + when(connection.getValueFactory()).thenReturn(vf); + this.sut = new UserAccountDao(connection, vocabulary); + } + + @AfterEach + void tearDown() { + KodiUserAccount.setContext(null); + } + + @Test + void persistGeneratesUserMetadataStatementsToDefaultContextWhenNoneIsSpecified() { + final KodiUserAccount user = initUserAccount(); + + sut.persist(user); + final IRI subj = vf.createIRI(user.getUri().toString()); + verify(connection).add(vf.createStatement(subj, RDF.TYPE, vf.createIRI(vocabulary.getType()))); + verify(connection).add(vf.createStatement(subj, vf.createIRI(vocabulary.getFirstName()), vf.createLiteral(user.getFirstName()))); + verify(connection).add(vf.createStatement(subj, vf.createIRI(vocabulary.getLastName()), vf.createLiteral(user.getLastName()))); + verify(connection).add(vf.createStatement(subj, vf.createIRI(vocabulary.getUsername()), vf.createLiteral(user.getUsername()))); + } + + private KodiUserAccount initUserAccount() { + final KodiUserAccount user = new KodiUserAccount(); + user.setUri(URI.create(vocabulary.getType() + "/" + UUID.randomUUID())); + user.setFirstName("First"); + user.setLastName("Last"); + user.setUsername("username"); + user.setEmail("First.Last@example.org"); + return user; + } + + @Test + void persistGeneratesUserMetadataStatementsToContextWhenItIsConfigured() { + final String context = cz.cvut.kbss.keycloak.provider.Vocabulary.s_i_uzivatel; + final KodiUserAccount user = initUserAccount(); + KodiUserAccount.setContext(context); + + sut.persist(user); + final IRI subj = vf.createIRI(user.getUri().toString()); + verify(connection).add(vf.createStatement(subj, RDF.TYPE, vf.createIRI(vocabulary.getType())), vf.createIRI(context)); + verify(connection).add(vf.createStatement(subj, vf.createIRI(vocabulary.getFirstName()), vf.createLiteral(user.getFirstName())), vf.createIRI(context)); + verify(connection).add(vf.createStatement(subj, vf.createIRI(vocabulary.getLastName()), vf.createLiteral(user.getLastName())), vf.createIRI(context)); + verify(connection).add(vf.createStatement(subj, vf.createIRI(vocabulary.getUsername()), vf.createLiteral(user.getUsername())), vf.createIRI(context)); + } + + @Test + void persistGeneratesEmailStatementWhenEmailPropertyIsConfigured() { + final KodiUserAccount user = initUserAccount(); + vocabulary.setEmail(FOAF.MBOX.stringValue()); + + sut.persist(user); + final IRI subj = vf.createIRI(user.getUri().toString()); + verify(connection).add(vf.createStatement(subj, RDF.TYPE, vf.createIRI(vocabulary.getType()))); + verify(connection).add(vf.createStatement(subj, vf.createIRI(vocabulary.getFirstName()), vf.createLiteral(user.getFirstName()))); + verify(connection).add(vf.createStatement(subj, vf.createIRI(vocabulary.getLastName()), vf.createLiteral(user.getLastName()))); + verify(connection).add(vf.createStatement(subj, vf.createIRI(vocabulary.getUsername()), vf.createLiteral(user.getUsername()))); + verify(connection).add(vf.createStatement(subj, vf.createIRI(vocabulary.getEmail()), vf.createLiteral(user.getEmail()))); + } +} \ No newline at end of file