private static void InitializeMock()
        {
            var options = new DbContextOptionsBuilder <DictionaryDBContext>()
                          .UseInMemoryDatabase(databaseName: "AdvDictionary")
                          .EnableSensitiveDataLogging()
                          .Options;

            dbcontextMock = new DictionaryDBContext(options);
            //var userStore = Mock.Of<IUserStore<User>>();
            //var userManager = new Mock<UserManager<User>>(userStore, null, null, null, null, null, null, null, null);
            //UserManagerMock userManager = new UserManagerMock(dbcontextMock);

            List <ForeignWord>  foreignWords   = PrepareForeignWordMocks();
            List <NativePhrase> nativePhrases  = PrepareNativePhrasesMocks();
            User                user           = PrepareUserMock("*****@*****.**");
            Language            language       = PrepareLanguageMock(user);
            List <WordPriority> wordPriorities = PrepareWordPrioritiesMocks(nativePhrases, foreignWords, language);

            dbcontextMock.NativePhrases.AddRange(nativePhrases);
            dbcontextMock.ForeignWords.AddRange(foreignWords);
            dbcontextMock.Users.Add(user);
            dbcontextMock.Languages.Add(language);
            dbcontextMock.WordPriorities.AddRange(wordPriorities);
            dbcontextMock.SaveChanges();
        }
        public async void GetLanguagesReturnsCollectionOfLanguages()
        {
            DictionaryDBContext dbcontextMock = DBContextMock.GetContextMock();
            var               context         = new DefaultHttpContext();
            User              user            = dbcontextMock.Users.SingleOrDefault();
            FakeUserManager   userManager     = new FakeUserManager(user);
            FakeSignInManager signInManager   = new FakeSignInManager(user, "testpwd");

            List <LanguageJSON> expectedLanguages = new List <LanguageJSON>()
            {
                new LanguageJSON()
                {
                    Name = "english"
                }
            };

            var controller = new JSONDataController(userManager, signInManager, dbcontextMock);

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = context
            };
            JsonResult result = await controller.GetLanguages();

            List <LanguageJSON> recievedLanguages = (List <LanguageJSON>)result.Value;

            Assert.Equal(expectedLanguages, recievedLanguages);
        }
        public async void GetWordsPrioritiesReturnsCollectionOnValidInput()
        {
            DictionaryDBContext dbcontextMock = DBContextMock.GetContextMock();
            var               context         = new DefaultHttpContext();
            User              user            = dbcontextMock.Users.SingleOrDefault();
            FakeUserManager   userManager     = new FakeUserManager(user);
            FakeSignInManager signInManager   = new FakeSignInManager(user, "testpwd");

            List <WordPrioritiesJSON> expectedWordPriorities = new List <WordPrioritiesJSON>()
            {
                new WordPrioritiesJSON()
                {
                    Language = new LanguageJSON()
                    {
                        Name = "english"
                    },
                    Phrase = new NativePhraseJson()
                    {
                        Phrase = "риба"
                    },
                    Word = new ForeignWordJSON()
                    {
                        Word = "fish"
                    },
                    Value = 0
                },
                new WordPrioritiesJSON()
                {
                    Language = new LanguageJSON()
                    {
                        Name = "english"
                    },
                    Phrase = new NativePhraseJson()
                    {
                        Phrase = "двері"
                    },
                    Word = new ForeignWordJSON()
                    {
                        Word = "door"
                    },
                    Value = 0
                }
            };

            var controller = new JSONDataController(userManager, signInManager, dbcontextMock);

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = context
            };
            JsonResult result = await controller.GetWordsPriorities(new GetWordPrioritiesModel { Language = "english", Amount = 2, Offset = 0 });

            List <WordPrioritiesJSON> recievedWordPriorities = (List <WordPrioritiesJSON>)result.Value;

            Assert.Equal(expectedWordPriorities, recievedWordPriorities);
        }
        public async void LoginReturnsAnErrorOnInValidInput(string email, string password)
        {
            DictionaryDBContext dbcontextMock = DBContextMock.GetContextMock();
            var               context         = new DefaultHttpContext();
            User              user            = dbcontextMock.Users.Where(u => u.Email == email).SingleOrDefault();
            FakeUserManager   userManager     = new FakeUserManager(user);
            FakeSignInManager signInManager   = new FakeSignInManager(user, "testpwd");

            var controller = new JSONDataController(userManager, signInManager, dbcontextMock);

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = context
            };
            IActionResult result = await controller.Login(new LoginModel { Email = email, Password = password });

            Assert.False(result is JsonResult);
        }
        public async void GetWordsPrioritiesReturnsEmptyCollectionIfOffsetIsTooLarge(int amount, int offset)
        {
            DictionaryDBContext dbcontextMock = DBContextMock.GetContextMock();
            var               context         = new DefaultHttpContext();
            User              user            = dbcontextMock.Users.SingleOrDefault();
            FakeUserManager   userManager     = new FakeUserManager(user);
            FakeSignInManager signInManager   = new FakeSignInManager(user, "testpwd");

            var controller = new JSONDataController(userManager, signInManager, dbcontextMock);

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = context
            };
            JsonResult result = await controller.GetWordsPriorities(new GetWordPrioritiesModel { Language = "english", Amount = amount, Offset = offset });

            Assert.False(((List <WordPrioritiesJSON>)result.Value).Any());
        }
        public async void RegisterReturnsAValidJWTTokenOnValidInput()
        {
            DictionaryDBContext dbcontextMock = DBContextMock.GetContextMock();
            var               context         = new DefaultHttpContext();
            User              user            = dbcontextMock.Users.Single();
            FakeUserManager   userManager     = new FakeUserManager(user);
            FakeSignInManager signInManager   = new FakeSignInManager(user, "testpwd");

            var controller = new JSONDataController(userManager, signInManager, dbcontextMock);

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = context
            };
            var result = await controller.Register(new RegisterModel { Email = "*****@*****.**", Password = "******" });

            LoginRegisterResponse response = (LoginRegisterResponse)result.Value;

            Assert.NotNull(response.Token);
        }
        public async void GetTranslationsReturnsTranslationsOnValidInput()
        {
            DictionaryDBContext       dbcontextMock          = DBContextMock.GetContextMock();
            List <WordPrioritiesJSON> expectedWordPriorities = new List <WordPrioritiesJSON>()
            {
                new WordPrioritiesJSON()
                {
                    Phrase = new NativePhraseJson()
                    {
                        Phrase = "риба"
                    },
                    Word = new ForeignWordJSON()
                    {
                        Word = "fish"
                    },
                    Language = new LanguageJSON()
                    {
                        Name = "english"
                    },
                    Value = 0
                }
            };

            var               context       = new DefaultHttpContext();
            User              user          = dbcontextMock.Users.Single();
            FakeUserManager   userManager   = new FakeUserManager(user);
            FakeSignInManager signInManager = new FakeSignInManager(user, "testpwd");

            var controller = new JSONDataController(userManager, signInManager, dbcontextMock);

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = context
            };
            JsonResult result = await controller.GetTranslations(new GetTranslations { Language = "english", Word = "fish" });

            List <WordPrioritiesJSON> recievedWordPriorities = (List <WordPrioritiesJSON>)result.Value;

            Assert.True(recievedWordPriorities.Count > 0);
            Assert.Equal(expectedWordPriorities, recievedWordPriorities);
        }
        public async void GetWordPrioritiesCountReturnsZeroOnWrongInput(string languageName)
        {
            DictionaryDBContext dbcontextMock = DBContextMock.GetContextMock();
            var               context         = new DefaultHttpContext();
            User              user            = dbcontextMock.Users.SingleOrDefault();
            FakeUserManager   userManager     = new FakeUserManager(user);
            FakeSignInManager signInManager   = new FakeSignInManager(user, "testpwd");

            int expectedAmount = 0;

            var controller = new JSONDataController(userManager, signInManager, dbcontextMock);

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = context
            };
            JsonResult result = await controller.GetWordPrioritiesCount(new LanguageInputModel { Name = languageName });

            int recievedamount = (int)result.Value;

            Assert.Equal(expectedAmount, recievedamount);
        }