public async Task TestIfGetAllChatRequestsWorksAccordingly()
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            var modelOne = new ChatRequestModel();

            modelOne.Email           = "*****@*****.**";
            modelOne.ConnectionId    = "connectionId";
            modelOne.IsAuthenticated = true;
            modelOne.Subject         = "Help me select laptop";

            await chatRequests.AddToQueueAsync(modelOne);

            var modelTwo = new ChatRequestModel();

            modelOne.Email           = "*****@*****.**";
            modelOne.ConnectionId    = "connectionIdrandom";
            modelOne.IsAuthenticated = true;
            modelOne.Subject         = "Help me select random laptop";

            await chatRequests.AddToQueueAsync(modelOne);


            var result = await chatRequests.GetAllChatRequestsAsync();

            Assert.NotEmpty(result);

            Assert.Equal(2, result.Count);
        }
        public async Task TestIfConnectionIdExistsReturnsTrue()
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            var modelOne = new ChatRequestModel();

            modelOne.Email           = "*****@*****.**";
            modelOne.ConnectionId    = "connectionId";
            modelOne.IsAuthenticated = true;
            modelOne.Subject         = "Help me select laptop";

            await chatRequests.AddToQueueAsync(modelOne);

            var modelTwo = new ChatRequestModel();

            modelOne.Email           = "*****@*****.**";
            modelOne.ConnectionId    = "connectionIdrandom";
            modelOne.IsAuthenticated = true;
            modelOne.Subject         = "Help me select random laptop";

            await chatRequests.AddToQueueAsync(modelOne);


            Assert.True(await chatRequests.ConnectionIdExistsAsync("connectionId"));


            Assert.True(await chatRequests.ConnectionIdExistsAsync("connectionIdrandom"));
        }
        public async Task TestIfGetAllChatRequestsReturnsEmptyCollection()
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            Assert.Empty(await chatRequests.GetAllChatRequestsAsync());
        }
        public async Task TestIfConnectionAlreadyEstablishedReturnsFalse(string connectionId, string subject, string email, string technicianName)
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            Assert.False(await chatRequests.ConnectionAlreadyEstablishedAsync(connectionId, "StoreUser"));
        }
        public async Task TestIfConnectionIdExistsReturnsFalse(string connectionId)
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            Assert.False(await chatRequests.ConnectionIdExistsAsync(connectionId));
        }
        public async Task TestIfEstablishedConnectionDetailsReturnsNull(string connectionId)
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            Assert.Null(await chatRequests.EstablishedConnectionDetailsAsync(connectionId, "StoreUser"));

            Assert.Null(await chatRequests.EstablishedConnectionDetailsAsync(connectionId, "Support"));
        }
        public async Task TestIfDisconnectFromChatThrowsError()
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            await Assert.ThrowsAsync <NullReferenceException>(async() =>
            {
                await chatRequests.DisconnectFromChat(null, null);
            });
        }
        public async Task TestIfEstablishedConnectionDetailsWorksAccordingly(string connectionId, string subject,
                                                                             string email,
                                                                             string technicianName)
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            await chatRequests.EstablishConnectionAsync(connectionId, subject, email, technicianName);

            Assert.NotNull(await chatRequests.EstablishedConnectionDetailsAsync(connectionId, "StoreUser"));

            Assert.NotNull(await chatRequests.EstablishedConnectionDetailsAsync(technicianName, "Admin"));
        }
        public async Task TestIfDisconnectFromChatWorksAccordingly(string connectionId, string subject, string email, string technicianName)
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            await chatRequests.EstablishConnectionAsync(connectionId, subject, email, technicianName);

            await chatRequests.DisconnectFromChat(technicianName, connectionId);

            var chat = await context.Chats.FirstOrDefaultAsync(x => x.TechnicianName == technicianName && x.ConnectionId == connectionId && x.ConnectionTerminated == true);

            Assert.NotNull(chat);

            Assert.True(chat.ConnectionTerminated);
        }
        public async Task TestIfEstablishConnectionWorksAccordingly(string connectionId, string subject, string email,
                                                                    string technicianName)
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            await chatRequests.EstablishConnectionAsync(connectionId, subject, email, technicianName);


            var result = await context.Chats.FirstOrDefaultAsync(x => x.ConnectionId == connectionId);

            Assert.NotNull(result);

            Assert.Equal(subject, result.Subject);
            Assert.Equal(technicianName, result.TechnicianName);
        }
        public async Task TestIfInsertChatWorksAccordingly(string connectionId, string subject, string email, string technicianName)
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            await chatRequests.EstablishConnectionAsync(connectionId, subject, email, technicianName);

            await chatRequests.InsertChatAsync(technicianName, connectionId, "User",
                                               "Please help me make the best choice!");


            var result = await context.Chats.FirstOrDefaultAsync(x => x.ConnectionId == connectionId);

            Assert.NotNull(result);

            Assert.NotNull(result.Messages);
        }
        public async Task TestIfRemoveChatRequestWorksAccordingly(string connectionOne, string connectionTwo)
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            var modelOne = new ChatRequestModel();

            modelOne.Email           = "*****@*****.**";
            modelOne.ConnectionId    = connectionOne;
            modelOne.IsAuthenticated = true;
            modelOne.Subject         = "Help me select laptop";

            await chatRequests.AddToQueueAsync(modelOne);

            var modelTwo = new ChatRequestModel();

            modelOne.Email           = "*****@*****.**";
            modelOne.ConnectionId    = connectionTwo;
            modelOne.IsAuthenticated = true;
            modelOne.Subject         = "Help me select random laptop";

            await chatRequests.AddToQueueAsync(modelOne);

            await chatRequests.RemoveChatRequestAsync(connectionOne);

            var resultOne = await chatRequests.GetAllChatRequestsAsync();

            Assert.NotEmpty(resultOne);

            Assert.Single(resultOne);

            await chatRequests.RemoveChatRequestAsync(connectionTwo);

            var resultTwo = await chatRequests.GetAllChatRequestsAsync();

            Assert.Empty(resultTwo);
        }
        public async Task TestIfAddToQueueWorksAccordingly()
        {
            var context = PCHUBDbContextInMemoryInitializer.InitializeContext();

            var chatRequests = new RequestChatServices(context);

            var model = new ChatRequestModel();

            model.Email           = "*****@*****.**";
            model.ConnectionId    = "connectionId";
            model.IsAuthenticated = true;
            model.Subject         = "Help me select laptop";

            await chatRequests.AddToQueueAsync(model);

            var result = await context.ChatRequests.FirstOrDefaultAsync(x => x.Email == "*****@*****.**");

            Assert.NotNull(result);

            Assert.Equal("connectionId", result.ConnetctionId);
            Assert.True(result.IsAuthenticated);
            Assert.Equal("Help me select laptop", result.Subject);
        }