Skip to content

Commit

Permalink
tests: improve test speed and restructure test package
Browse files Browse the repository at this point in the history
* delete empty XesarApiInstanceTest.kt
* change package structure (now splitted into integration and unit)
* remove unnessary integration tests for every command testing if an OptionalEventException/RequiredEventException was thrown (instead unit tests ExecuteACommandAndSimulateDifferentResultScenarios.kt)
  • Loading branch information
berka3 committed Jul 31, 2024
1 parent 69e606f commit e4ec18e
Show file tree
Hide file tree
Showing 139 changed files with 1,213 additions and 3,150 deletions.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.open200.xesar.connect
package com.open200.xesar.connect.test.integration

import com.open200.xesar.connect.Topics
import com.open200.xesar.connect.UserCredentials
import com.open200.xesar.connect.XesarConnect
import com.open200.xesar.connect.XesarMqttClient
import com.open200.xesar.connect.exception.UnauthorizedLoginAttemptException
import com.open200.xesar.connect.testutils.MosquittoContainer
import io.kotest.assertions.throwables.shouldThrow
import io.kotest.common.runBlocking
import io.kotest.core.spec.style.FunSpec
Expand Down Expand Up @@ -121,6 +124,4 @@ class ConnectAndLoginTest :
}
}
}
// TODO
test("logout") {}
})
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.open200.xesar.connect
package com.open200.xesar.connect.test.integration

import com.open200.xesar.connect.Topics
import com.open200.xesar.connect.XesarConnect
import com.open200.xesar.connect.XesarMqttClient
import com.open200.xesar.connect.filters.AllTopicsFilter
import com.open200.xesar.connect.testutils.MosquittoContainer
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.perProject
import io.kotest.matchers.booleans.shouldBeTrue
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.open200.xesar.connect
package com.open200.xesar.connect.test.integration

import com.open200.xesar.connect.Topics
import com.open200.xesar.connect.XesarConnect
import com.open200.xesar.connect.XesarMqttClient
import com.open200.xesar.connect.filters.AllTopicsFilter
import com.open200.xesar.connect.testutils.MosquittoContainer
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.perProject
import io.kotest.matchers.booleans.shouldBeFalse
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.open200.xesar.connect.testutils
package com.open200.xesar.connect.test.integration

import com.open200.xesar.connect.Config
import io.mockk.mockk
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.open200.xesar.connect.query.stream
package com.open200.xesar.connect.test.integration

import com.open200.xesar.connect.*
import com.open200.xesar.connect.extension.queryStreamPerson
import com.open200.xesar.connect.messages.command.Query
import com.open200.xesar.connect.messages.query.QueryList
import com.open200.xesar.connect.messages.query.encodeQueryList
import com.open200.xesar.connect.testutils.MosquittoContainer
import com.open200.xesar.connect.testutils.PersonFixture
import com.open200.xesar.connect.test.util.fixture.PersonFixture
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.perProject
import io.kotest.matchers.equals.shouldBeEqual
Expand All @@ -16,7 +15,7 @@ import java.util.*
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.toList

class QueryPersonStreamTest :
class QueryStreamTest :
FunSpec({
val container = MosquittoContainer.container()
val config = MosquittoContainer.config(container)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.open200.xesar.connect
package com.open200.xesar.connect.test.integration

import com.open200.xesar.connect.testutils.MosquittoContainer
import com.open200.xesar.connect.Topics
import com.open200.xesar.connect.XesarConnect
import com.open200.xesar.connect.logger
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.perProject
import io.kotest.matchers.shouldBe
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package com.open200.xesar.connect.test.integration.command

import com.open200.xesar.connect.*
import com.open200.xesar.connect.extension.addEvvaComponentAsync
import com.open200.xesar.connect.messages.ComponentType
import com.open200.xesar.connect.messages.event.*
import com.open200.xesar.connect.messages.query.ComponentStatus
import com.open200.xesar.connect.test.integration.MosquittoContainer
import io.kotest.common.runBlocking
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.perProject
import io.kotest.matchers.equals.shouldBeEqual
import io.kotest.matchers.shouldBe
import io.mockk.coEvery
import java.time.LocalDateTime
import java.util.*
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.launch

class AddEvvaComponentTest :
FunSpec({
val container = MosquittoContainer.container()
val config = MosquittoContainer.config(container)
listener(container.perProject())

test("add evva component returning both events") {
coEvery { config.uuidGenerator.generateId() }
.returns(UUID.fromString("00000000-1281-40ae-89d7-5c541d77a757"))
runBlocking {
val simulatedBackendReady = CompletableDeferred<Unit>()
val commandReceived = CompletableDeferred<String>()

launch {
XesarMqttClient.connectAsync(config).await().use { client ->
client.subscribeAsync(arrayOf(Topics.ALL_TOPICS)).await()

client.onMessage = { topic, payload ->
when (topic) {
Topics.Command.ADD_EVVA_COMPONENT -> {
commandReceived.complete(payload.decodeToString())
}
}
}

simulatedBackendReady.complete(Unit)

val commandContent = commandReceived.await()

commandContent.shouldBeEqual(
"{\"commandId\":\"00000000-1281-40ae-89d7-5c541d77a757\",\"id\":\"2d52bd95-18ba-4e46-8f00-0fc4c1e3f9be\",\"type\":\"Cylinder\",\"token\":\"JDJhJDEwJDFSNEljZ2FaRUNXUXBTQ25XN05KbE9qRzFHQ1VjMzkvWTBVcFpZb1M4Vmt0dnJYZ0tJVFBx\"}")

val apiEvent =
ApiEvent(
UUID.fromString("00000000-1281-40ae-89d7-5c541d77a757"),
InstallationPointChanged(
aggregateId =
UUID.fromString("43edc7cf-80ab-4486-86db-41cda2c7a2cd")))

val apiEvent2 =
ApiEvent(
UUID.fromString("00000000-1281-40ae-89d7-5c541d77a757"),
EvvaComponentAdded(
id = UUID.fromString("2d52bd95-18ba-4e46-8f00-0fc4c1e3f9be"),
evvaComponentId =
UUID.fromString("3a33c05b-133d-4b9d-a496-5d30dfd2d2c3"),
type = ComponentType.Cylinder,
stateChangedAt = LocalDateTime.MIN,
status = ComponentStatus.AssembledPrepared))

client
.publishAsync(
Topics.Event.INSTALLATION_POINT_CHANGED, encodeEvent(apiEvent))
.await()

client
.publishAsync(Topics.Event.EVVA_COMPONENT_ADDED, encodeEvent(apiEvent2))
.await()
}
}
launch {
simulatedBackendReady.await()

val api = XesarConnect.connectAndLoginAsync(config).await()
api.subscribeAsync(
Topics(
Topics.Event.INSTALLATION_POINT_CHANGED,
Topics.Event.EVVA_COMPONENT_ADDED))
.await()

val addEvvaComponentEventPair =
api.addEvvaComponentAsync(
UUID.fromString("2d52bd95-18ba-4e46-8f00-0fc4c1e3f9be"),
ComponentType.Cylinder)
val test = addEvvaComponentEventPair.installationPointChangedDeferred.await()
test.aggregateId.shouldBeEqual(
UUID.fromString("43edc7cf-80ab-4486-86db-41cda2c7a2cd"))
val evvaComponentAdded =
addEvvaComponentEventPair.evvaComponentAddedDeferred.await()
evvaComponentAdded.type.shouldBe(ComponentType.Cylinder)
}
}
}
})
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.open200.xesar.connect.command
package com.open200.xesar.connect.test.integration.command

import com.open200.xesar.connect.Topics
import com.open200.xesar.connect.XesarConnect
Expand All @@ -8,7 +8,7 @@ import com.open200.xesar.connect.messages.command.AuthorizationData
import com.open200.xesar.connect.messages.event.ApiEvent
import com.open200.xesar.connect.messages.event.IndividualAuthorizationsAddedToMedium
import com.open200.xesar.connect.messages.event.encodeEvent
import com.open200.xesar.connect.testutils.MosquittoContainer
import com.open200.xesar.connect.test.integration.MosquittoContainer
import io.kotest.common.runBlocking
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.perProject
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.open200.xesar.connect.command
package com.open200.xesar.connect.test.integration.command

import com.open200.xesar.connect.Topics
import com.open200.xesar.connect.XesarConnect
Expand All @@ -7,7 +7,7 @@ import com.open200.xesar.connect.extension.addInstallationPointToZoneAsync
import com.open200.xesar.connect.messages.event.ApiEvent
import com.open200.xesar.connect.messages.event.InstallationPointsInZoneChanged
import com.open200.xesar.connect.messages.event.encodeEvent
import com.open200.xesar.connect.testutils.MosquittoContainer
import com.open200.xesar.connect.test.integration.MosquittoContainer
import io.kotest.common.runBlocking
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.perProject
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.open200.xesar.connect.command
package com.open200.xesar.connect.test.integration.command

import com.open200.xesar.connect.Topics
import com.open200.xesar.connect.XesarConnect
Expand All @@ -8,7 +8,7 @@ import com.open200.xesar.connect.messages.command.AuthorizationData
import com.open200.xesar.connect.messages.event.ApiEvent
import com.open200.xesar.connect.messages.event.IndividualAuthorizationsAddedToMedium
import com.open200.xesar.connect.messages.event.encodeEvent
import com.open200.xesar.connect.testutils.MosquittoContainer
import com.open200.xesar.connect.test.integration.MosquittoContainer
import io.kotest.common.runBlocking
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.perProject
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package com.open200.xesar.connect.test.integration.command

import com.open200.xesar.connect.Topics
import com.open200.xesar.connect.XesarConnect
import com.open200.xesar.connect.XesarMqttClient
import com.open200.xesar.connect.extension.assignAuthorizationProfileToMediumAsync
import com.open200.xesar.connect.messages.event.*
import com.open200.xesar.connect.test.integration.MosquittoContainer
import io.kotest.common.runBlocking
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.perProject
import io.kotest.matchers.equals.shouldBeEqual
import io.mockk.coEvery
import java.time.LocalDateTime
import java.util.*
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.launch

class AssignAuthorizationProfileToMediumTest :
FunSpec({
val container = MosquittoContainer.container()
val config = MosquittoContainer.config(container)
listener(container.perProject())

test("assign authorization profile to medium returning both events") {
coEvery { config.uuidGenerator.generateId() }
.returns(UUID.fromString("00000000-1281-40ae-89d7-5c541d77a757"))
runBlocking {
val simulatedBackendReady = CompletableDeferred<Unit>()
val commandReceived = CompletableDeferred<String>()

launch {
XesarMqttClient.connectAsync(config).await().use { client ->
client.subscribeAsync(arrayOf(Topics.ALL_TOPICS)).await()

client.onMessage = { topic, payload ->
when (topic) {
Topics.Command.ASSIGN_AUTHORIZATION_PROFILE_TO_MEDIUM -> {
commandReceived.complete(payload.decodeToString())
}
}
}

simulatedBackendReady.complete(Unit)

val commandContent = commandReceived.await()

commandContent.shouldBeEqual(
"{\"commandId\":\"00000000-1281-40ae-89d7-5c541d77a757\",\"authorizationProfileId\":null,\"id\":\"2d52bd95-18ba-4e46-8f00-0fc4c1e3f9be\",\"token\":\"JDJhJDEwJDFSNEljZ2FaRUNXUXBTQ25XN05KbE9qRzFHQ1VjMzkvWTBVcFpZb1M4Vmt0dnJYZ0tJVFBx\"}")

val apiEvent2 =
ApiEvent(
UUID.fromString("00000000-1281-40ae-89d7-5c541d77a757"),
MediumAuthorizationProfileChanged(
id = UUID.fromString("43edc7cf-80ab-4486-86db-41cda2c7a2cd")))

val apiEvent =
ApiEvent(
UUID.fromString("00000000-1281-40ae-89d7-5c541d77a757"),
MediumChanged(
id = UUID.fromString("43edc7cf-80ab-4486-86db-41cda2c7a2cd"),
accessBeginAt =
LocalDateTime.parse("2023-08-24T16:25:52.225991"),
changedAt = LocalDateTime.parse("2023-08-23T16:25:52.225991")))

client
.publishAsync(Topics.Event.MEDIUM_CHANGED, encodeEvent(apiEvent))
.await()

client
.publishAsync(
Topics.Event.MEDIUM_AUTHORIZATION_PROFILE_CHANGED,
encodeEvent(apiEvent2))
.await()
}
}
launch {
simulatedBackendReady.await()

val api = XesarConnect.connectAndLoginAsync(config).await()
api.subscribeAsync(
Topics(
Topics.Event.MEDIUM_CHANGED,
Topics.Event.MEDIUM_AUTHORIZATION_PROFILE_CHANGED))
.await()

val assignAuthorizationProfileToMediumResult =
api.assignAuthorizationProfileToMediumAsync(
UUID.fromString("2d52bd95-18ba-4e46-8f00-0fc4c1e3f9be"))
val test =
assignAuthorizationProfileToMediumResult
.mediumAuthorizationProfileChangedDeferred
.await()
test.id.shouldBeEqual(UUID.fromString("43edc7cf-80ab-4486-86db-41cda2c7a2cd"))
val mediumChanged =
assignAuthorizationProfileToMediumResult.mediumChangedDeferred.await()
mediumChanged.id.shouldBeEqual(
UUID.fromString("43edc7cf-80ab-4486-86db-41cda2c7a2cd"))
}
}
}
})
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.open200.xesar.connect.command
package com.open200.xesar.connect.test.integration.command

import com.open200.xesar.connect.Topics
import com.open200.xesar.connect.XesarConnect
Expand All @@ -7,7 +7,7 @@ import com.open200.xesar.connect.extension.assignPersonToMediumAsync
import com.open200.xesar.connect.messages.event.ApiEvent
import com.open200.xesar.connect.messages.event.MediumPersonChanged
import com.open200.xesar.connect.messages.event.encodeEvent
import com.open200.xesar.connect.testutils.MosquittoContainer
import com.open200.xesar.connect.test.integration.MosquittoContainer
import io.kotest.common.runBlocking
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.perProject
Expand Down
Loading

0 comments on commit e4ec18e

Please sign in to comment.