public async void Undelete_RestoreNonExistentInstance_ReturnsNotFound()
            {
                // Arrange
                MessageBoxTestData testData     = new MessageBoxTestData();
                string             instanceGuid = Guid.NewGuid().ToString();

                Mock <IApplicationRepository> applicationRepository = new Mock <IApplicationRepository>();

                DocumentClientException    dex = CreateDocumentClientExceptionForTesting("Not found", HttpStatusCode.NotFound);
                Mock <IInstanceRepository> instanceRepository = new Mock <IInstanceRepository>();

                instanceRepository.Setup(s => s.GetOne(It.IsAny <string>(), It.IsAny <int>())).ThrowsAsync(dex);

                Mock <IInstanceEventRepository> instanceEventRepository = new Mock <IInstanceEventRepository>();

                HttpClient client = GetTestClient(instanceRepository.Object, applicationRepository.Object, instanceEventRepository.Object);

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _validToken);

                // Act
                HttpResponseMessage response = await client.PutAsync($"{BasePath}/sbl/instances/{testData.GetInstanceOwnerPartyId()}/{instanceGuid}/undelete", null);

                // Assert
                Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);

                string content     = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
                string expectedMsg = $"Didn't find the object that should be restored with instanceId={testData.GetInstanceOwnerPartyId()}/{instanceGuid}";

                Assert.Equal(expectedMsg, content);
            }
            public async void Undelete_AttemptToRestoreHardDeletedInstance_ReturnsBadRequest()
            {
                // Arrange
                MessageBoxTestData testData = new MessageBoxTestData();
                Instance           instance = testData.GetHardDeletedInstance();

                Mock <IApplicationRepository> applicationRepository = new Mock <IApplicationRepository>();

                Mock <IInstanceRepository> instanceRepository = new Mock <IInstanceRepository>();

                instanceRepository.Setup(s => s.GetOne(It.IsAny <string>(), It.IsAny <int>())).ReturnsAsync(instance);

                Mock <IInstanceEventRepository> instanceEventRepository = new Mock <IInstanceEventRepository>();

                HttpClient client = GetTestClient(instanceRepository.Object, applicationRepository.Object, instanceEventRepository.Object);

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _validToken);

                // Act
                HttpResponseMessage response = await client.PutAsync($"{BasePath}/sbl/instances/{testData.GetInstanceOwnerPartyId()}/{instance.Id.Split("/")[1]}/undelete", null);

                // Assert
                Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);

                string content = await response.Content.ReadAsStringAsync();

                string expectedMsg = "Instance was permanently deleted and cannot be restored.";

                Assert.Equal(expectedMsg, content);
            }
            public async void Undelete_ResponseIsDeny_ReturnsStatusForbidden()
            {
                // Arrange
                MessageBoxTestData testData = new MessageBoxTestData();
                Instance           instance = testData.GetSoftDeletedInstance();

                Mock <IApplicationRepository> applicationRepository = new Mock <IApplicationRepository>();

                Mock <IInstanceRepository> instanceRepository = new Mock <IInstanceRepository>();

                instanceRepository.Setup(s => s.GetOne(It.IsAny <string>(), It.IsAny <int>())).ReturnsAsync(instance);
                instanceRepository.Setup(s => s.Update(It.IsAny <Instance>())).ReturnsAsync((Instance i) => i);

                InstanceEvent instanceEvent = null;

                Mock <IInstanceEventRepository> instanceEventRepository = new Mock <IInstanceEventRepository>();

                instanceEventRepository.Setup(s => s.InsertInstanceEvent(It.IsAny <InstanceEvent>())).Callback <InstanceEvent>(p => instanceEvent = p)
                .ReturnsAsync((InstanceEvent r) => r);

                HttpClient client = GetTestClient(instanceRepository.Object, applicationRepository.Object, instanceEventRepository.Object);
                string     token  = PrincipalUtil.GetToken(-1);

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                // Act
                HttpResponseMessage response = await client.PutAsync($"{BasePath}/sbl/instances/{testData.GetInstanceOwnerPartyId()}/{instance.Id.Split("/")[1]}/undelete", null);

                // Assert
                Assert.Equal(HttpStatusCode.Forbidden, response.StatusCode);
                string content = await response.Content.ReadAsStringAsync();

                Assert.True(string.IsNullOrEmpty(content));
            }
            public async void Delete_SoftDeleteActiveInstance_InstanceIsMarked_EventIsCreated_ReturnsTrue()
            {
                // Arrange
                MessageBoxTestData testData = new MessageBoxTestData();
                Instance           instance = testData.GetActiveInstance();

                Mock <IApplicationRepository> applicationRepository = new Mock <IApplicationRepository>();

                Instance storedInstance = null;

                Mock <IInstanceRepository> instanceRepository = new Mock <IInstanceRepository>();

                instanceRepository.Setup(s => s.GetOne(It.IsAny <string>(), It.IsAny <int>())).ReturnsAsync(instance);
                instanceRepository.Setup(s => s.Update(It.IsAny <Instance>())).Callback <Instance>(p => storedInstance = p).ReturnsAsync((Instance i) => i);

                InstanceEvent instanceEvent = null;

                Mock <IInstanceEventRepository> instanceEventRepository = new Mock <IInstanceEventRepository>();

                instanceEventRepository.Setup(s => s.InsertInstanceEvent(It.IsAny <InstanceEvent>())).Callback <InstanceEvent>(p => instanceEvent = p)
                .ReturnsAsync((InstanceEvent r) => r);

                HttpClient client = GetTestClient(instanceRepository.Object, applicationRepository.Object, instanceEventRepository.Object);

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _validToken);

                // Act
                HttpResponseMessage response = await client.DeleteAsync($"{BasePath}/sbl/instances/{testData.GetInstanceOwnerPartyId()}/{instance.Id.Split("/")[1]}?hard=false");

                // Assert
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                string content = await response.Content.ReadAsStringAsync();

                bool actualResult = JsonConvert.DeserializeObject <bool>(content);

                Assert.True(actualResult);

                Assert.True(storedInstance.Status.SoftDeleted.HasValue);
                Assert.False(storedInstance.Status.HardDeleted.HasValue);

                Assert.NotNull(instanceEvent);
                Assert.Equal("Deleted", instanceEvent.EventType);
            }
            public async void GetMessageBoxInstanceList_RequestArchivedInstancesForGivenOwner_ReturnsCorrectListOfInstancesWithEndEventTask()
            {
                // Arrange
                MessageBoxTestData testData      = new MessageBoxTestData();
                List <Instance>    testInstances = testData.GetInstances_App4();

                Mock <IInstanceEventRepository> instanceEventRepository = new Mock <IInstanceEventRepository>();

                Mock <IInstanceRepository> instanceRepository = new Mock <IInstanceRepository>();

                instanceRepository.Setup(s => s.GetInstancesInStateOfInstanceOwner(It.IsAny <int>(), It.Is <string>(p2 => p2 == "archived")))
                .ReturnsAsync(testInstances);

                Mock <IApplicationRepository> applicationRepository = new Mock <IApplicationRepository>();

                applicationRepository.Setup(s => s.GetAppTitles(It.IsAny <List <string> >())).ReturnsAsync(TestData.AppTitles_Dict_App1);

                HttpClient client = GetTestClient(instanceRepository.Object, applicationRepository.Object, instanceEventRepository.Object);

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _validToken);

                // Act
                HttpResponseMessage responseMessage = await client.GetAsync($"{BasePath}/sbl/instances/{testData.GetInstanceOwnerPartyId()}?state=archived");

                // Assert
                instanceRepository.VerifyAll();

                Assert.Equal(HttpStatusCode.OK, responseMessage.StatusCode);

                string responseContent = await responseMessage.Content.ReadAsStringAsync();

                List <MessageBoxInstance> messageBoxInstances = JsonConvert.DeserializeObject <List <MessageBoxInstance> >(responseContent);

                int actualCount   = messageBoxInstances.Count;
                int expectedCount = 1;

                Assert.Equal(expectedCount, actualCount);
            }
            public async void GetMessageBoxInstanceList_RequestAllInstancesForAnOwnerInEnglish_ReturnsAllElementsWithEnglishTitles()
            {
                // Arrange
                MessageBoxTestData testData      = new MessageBoxTestData();
                List <Instance>    testInstances = testData.GetInstances_App2();

                Mock <IInstanceEventRepository> instanceEventRepository = new Mock <IInstanceEventRepository>();

                Mock <IInstanceRepository> instanceRepository = new Mock <IInstanceRepository>();

                instanceRepository.Setup(s => s.GetInstancesInStateOfInstanceOwner(It.IsAny <int>(), It.IsAny <string>())).ReturnsAsync(testInstances);

                Mock <IApplicationRepository> applicationRepository = new Mock <IApplicationRepository>();

                applicationRepository.Setup(s => s.GetAppTitles(It.IsAny <List <string> >())).ReturnsAsync(TestData.AppTitles_Dict_App2);

                HttpClient client = GetTestClient(instanceRepository.Object, applicationRepository.Object, instanceEventRepository.Object);

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _validToken);

                // Act
                HttpResponseMessage response = await client.GetAsync($"{BasePath}/sbl/instances/{testData.GetInstanceOwnerPartyId()}?state=active&language=en");

                string content = await response.Content.ReadAsStringAsync();

                List <MessageBoxInstance> messageBoxInstances = JsonConvert.DeserializeObject <List <MessageBoxInstance> >(content);

                int    actualCount = messageBoxInstances.Count;
                string actualTitle = messageBoxInstances.First().Title;

                // Assert
                int    expectedCount = 2;
                string expectedTitle = "Test application 2 english";

                Assert.Equal(expectedCount, actualCount);
                Assert.Equal(expectedTitle, actualTitle);
            }