src/Shared/Infrastructure/Infrastructure.Persistence.IntegrationTests/StatusChangeRepositoryTests.cs (62 lines of code) (raw):

// ========================================================================= // Copyright 2020 EPAM Systems, Inc. // // 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. // ========================================================================= using Cassandra.Data.Linq; using Epam.CovidResistance.Shared.Domain.Model; using Epam.CovidResistance.Shared.Infrastructure.Persistence.Entities; using Epam.CovidResistance.Shared.Infrastructure.Persistence.Repositories; using Epam.CovidResistance.Shared.Infrastructure.Persistence.Response; using Microsoft.Extensions.DependencyInjection; using NUnit.Framework; using System; namespace Epam.CovidResistance.Shared.Infrastructure.Persistence.IntegrationTests { [TestFixture] public class StatusChangeRepositoryTests : TestsBase { [Test] public void TestStatusChangeRequest() { var medicalCode = "XYZ123"; var infectedStatusId = 1; var repository = ServiceProvider.GetService<IStatusChangeRepository>(); var changeRequest = new StatusChangeRequest(infectedStatusId, new DateTime(2020, 4, 1), "Comment"); var firstRequestSuccessful = repository.TryCreateChangeRequest(medicalCode, changeRequest, "medicalUserToken"); Assert.That(firstRequestSuccessful, Is.True); var secondRequestSuccessful = repository.TryCreateChangeRequest(medicalCode, changeRequest, "otherDoctor"); Assert.That(secondRequestSuccessful, Is.False); var statusChange = new Table<StatusChange>(CassandraSession.Session) .FirstOrDefault(row => row.MedicalCode == medicalCode) .Execute(); Assert.That(statusChange, Is.Not.Null); Assert.That(statusChange.AcceptedAt, Is.Null); Assert.That(statusChange.Comment, Is.EqualTo(changeRequest.Comment)); Assert.That(statusChange.CreatedAt, Is.Not.Null); Assert.That(statusChange.RequestedBy, Is.EqualTo("medicalUserToken")); Assert.That(statusChange.StatusId, Is.EqualTo(changeRequest.StatusId)); Assert.That(statusChange.StatusChangedOn, Is.EqualTo(changeRequest.StatusChangedOn)); } [Test] public void TestStatusChangeAccept() { var medicalCode = "ABC123"; var infectedStatusId = 1; var repository = ServiceProvider.GetService<IStatusChangeRepository>(); var changeRequest = new StatusChangeRequest(infectedStatusId, new DateTime(2020, 4, 1), "Comment"); Assert.That(repository.TryCreateChangeRequest(medicalCode, changeRequest, "medicalUserToken"), Is.True, "Creating a new code is successful"); Assert.That(repository.TryAcceptChangeRequest(medicalCode + "invalid", 24), Is.EqualTo(AcceptChangeResponse.Error(AcceptChangeResult.MissingCode)), "Accepting with missing code fails"); Assert.That(repository.TryAcceptChangeRequest(medicalCode, 0), Is.EqualTo(AcceptChangeResponse.Error(AcceptChangeResult.ExpiredCode)), "Accepting after expiration fails"); Assert.That(repository.TryAcceptChangeRequest(medicalCode, 24), Is.EqualTo(AcceptChangeResponse.Success(infectedStatusId, changeRequest.StatusChangedOn)), "Accepting with good code succeeds"); // verify that AcceptedAt is set var statusChange = new Table<StatusChange>(CassandraSession.Session) .FirstOrDefault(row => row.MedicalCode == medicalCode) .Execute(); Assert.That(statusChange.AcceptedAt, Is.Not.Null); Assert.That( repository.TryAcceptChangeRequest(medicalCode, 24), Is.EqualTo(AcceptChangeResponse.Error(AcceptChangeResult.ReusedCode)), "Accepting with a taken code fails"); } } }