public async Task <TicketChat> CreateMessage(int ticket_id, TicketChat chat)
        {
            int userId = await base.GetUserId(httpContext.GetCurrentAuth());

            using (var _context = contextFactory.CreateDbContext())
            {
                var auth = httpContext.GetCurrentAuth();

                var currentUser = await _context.Users.Where(x => x.Auth == auth).FirstOrDefaultAsync();

                var ticket = await _context.SupportTicket.Include(x => x.User).Where(x => x.Id == ticket_id && (x.User.Auth == httpContext.GetCurrentAuth() || currentUser.Role == "Admin")).FirstOrDefaultAsync();

                if (ticket == null)
                {
                    throw new ArgumentException("There isn't a ticket with that id for this person!");
                }

                chat.CreatorId = userId;

                ticket.TicketChat.Add(chat);

                await _context.SaveChangesAsync();

                return(chat);
            }
        }
        public async Task <IActionResult> CreateMessage([FromRoute] int ticket_id, [FromBody] TicketChat chat)
        {
            try
            {
                await _context.CreateMessage(ticket_id, chat);

                var ticket = await _context.GetTicket(ticket_id);

                var dto = mapper.Map <SupportTicketViewModel>(ticket);

                return(Ok(dto));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        public async Task CreateMessage()
        {
            // Inject
            CreateIdentity(Users[0].Auth);

            // Arrange
            var ticket = new SupportTicket()
            {
                Title = "Gosho", Description = "pesho", UserId = Users[0].Id,
            };
            TicketChat message;

            using (var a = factory.CreateDbContext())
            {
                await a.AddAsync(ticket);

                await a.SaveChangesAsync();

                message = new TicketChat()
                {
                    TicketId = ticket.Id, Message = "Some message"
                };

                await a.AddAsync(message);

                await a.SaveChangesAsync();

                ticket = await a.SupportTicket.Include(x => x.User).Where(x => x.Id == ticket.Id).FirstOrDefaultAsync();
            }

            var expected = mapper.Map <SupportTicketViewModel>(ticket);

            foreach (var a in expected.TicketChat)
            {
                a.IsCurrentUser = true;
                a.CreatorId     = 1;
            }
            // Act
            var result = await controller.CreateMessage(ticket.Id, message);

            // Assert
            Assert.Equal(Serialize(expected), Serialize(((OkObjectResult)result).Value));
        }
        public static void Seed(IContextFactory factory)
        {
            using (var a = factory.CreateDbContext())
            {
                // Re-creates database
                a.Database.EnsureDeleted();
                a.Database.EnsureCreated();


                // Seeds users
                Users = new Users[4]
                {
                    new Users()
                    {
                        Auth = "George"
                    },
                    new Users()
                    {
                        Auth = "SecondAuth", Role = "Admin"
                    },
                    new Users()
                    {
                        Auth = "ThirdAuth"
                    },
                    new Users()
                    {
                        Auth = "auth0|5f955e7b9b8822006ee06870", Name = "RealAccount"
                    },
                };

                a.AddRange(Users);
                a.SaveChanges();


                // Seeds wishlist
                WishLists = new WishList[3]
                {
                    new WishList()
                    {
                        Transportation = "BICYCLING", UserId = Users[0].Id
                    },
                    new WishList()
                    {
                        Transportation = "DRIVING", UserId = Users[1].Id
                    },
                    new WishList()
                    {
                        Transportation = "WALKING", UserId = Users[2].Id
                    },
                };

                a.AddRange(WishLists);
                a.SaveChanges();


                // Seeds tickets
                SupportTickets = new SupportTicket[3]
                {
                    new SupportTicket()
                    {
                        UserId = 1, Title = "First title", Description = "First description"
                    },
                    new SupportTicket()
                    {
                        UserId = 2, Title = "Second title", Description = "Second description"
                    },
                    new SupportTicket()
                    {
                        UserId = 3, Title = "Third title", Description = "Third description"
                    },
                };

                a.AddRange(SupportTickets);
                a.SaveChanges();


                // Seeds ticket chats
                SupportChat = new TicketChat[3]
                {
                    new TicketChat()
                    {
                        TicketId = 1, CreatorId = 1, Message = "Created by FirstAuth for First Title ticket"
                    },
                    new TicketChat()
                    {
                        TicketId = 2, CreatorId = 2, Message = "Created by SecondAuth for Second Title ticket"
                    },
                    new TicketChat()
                    {
                        TicketId = 3, CreatorId = 3, Message = "Created by ThirdAuth for Third Title ticket"
                    },
                };

                a.AddRange(SupportChat);
                a.SaveChanges();

                UserTrips = new UserTrips[3]
                {
                    new UserTrips()
                    {
                        Distance = 50, Duration = 12, Name = "trip to bg", Transportation = "DRIVING", UserId = Users[0].Id
                    },
                    new UserTrips()
                    {
                        Distance = 510, Duration = 122, Name = "trip to en", Transportation = "BICYCLING", UserId = Users[0].Id
                    },
                    new UserTrips()
                    {
                        Distance = 540, Duration = 1222, Name = "trip to nl", Transportation = "WALKING", UserId = Users[1].Id
                    },
                };


                a.AddRange(UserTrips);
                a.SaveChanges();

                Locations = new Locations[5]
                {
                    new Locations()
                    {
                        Lang = 5, Long = 3, Name = "BS", TripId = UserTrips[0].Id, PlaceId = "123"
                    },
                    new Locations()
                    {
                        Lang = 5, Long = 3, Name = "zaw", TripId = UserTrips[0].Id, PlaceId = "123"
                    },
                    new Locations()
                    {
                        Lang = 5, Long = 3, Name = "awesda", WishlistId = WishLists[0].Id, PlaceId = "123"
                    },
                    new Locations()
                    {
                        Lang = 5, Long = 53, Name = "zafg", WishlistId = WishLists[0].Id, PlaceId = "123"
                    },
                    new Locations()
                    {
                        Lang = 5, Long = 3, Name = "hjm", TripId = UserTrips[2].Id, PlaceId = "123"
                    },
                };


                //Because entity is retarded and inverses order if i dont do this
                a.Add(Locations[0]);
                a.SaveChanges();
                a.Add(Locations[1]);
                a.SaveChanges();
                a.Add(Locations[2]);
                a.SaveChanges();
                a.Add(Locations[3]);
                a.SaveChanges();
                a.Add(Locations[4]);
                a.SaveChanges();
            }
        }