public void TestRetrieveQueryableDataFileAlreadyLoaded() { //Create the mock file loader Mock <IAnswerDataJsonFileLoader> mockFileLoader = CreateMockFileLoader(); //Create an AnswerDB instance AnswerDB testAnswerDB = new AnswerDB(mockFileLoader.Object, TestDataFileName); //Retrieve the test data, which will be our expected data List <Answer> expectedAnswers = CreateTestData(); //Retrieve the Querable from the DB IQueryable <Answer> answerQueryable = testAnswerDB.GetAnswerQueryable(); //Verify that the file loader was called correctly mockFileLoader.Verify(mock => mock.LoadAnswerDataFromFile( It.Is <string>(fileName => fileName == TestDataFileName)), Times.Once); //That should have loaded the file to the DB. Retrieve the queryable again. answerQueryable = testAnswerDB.GetAnswerQueryable(); //Verify that we actually got a queryable Assert.That(answerQueryable, Is.Not.Null); //Verify that the queryable returns the correct data List <Answer> actualAnswers = answerQueryable.ToList(); expectedAnswers.Zip(actualAnswers, Tuple.Create) .ToList() .ForEach(answerTuple => DataComparers.CompareAnswers(answerTuple.Item1, answerTuple.Item2)); //Verify that the file loader was not called again mockFileLoader.Verify(mock => mock.LoadAnswerDataFromFile(It.IsAny <string>()), Times.Once); }
public void TestLoadingFileWithSingleRecord() { //Define the expected data List <Answer> expectedData = new List <Answer>() { new Answer() { SubmittedAnswerId = 12345, SubmitDateTime = DateTime.Parse("2018-01-30T08:57:00.00"), Correct = 1, Progress = 0, UserId = 56789, ExerciseId = 23, Difficulty = "5", Subject = "Geschiedenis", Domain = "-", LearningObjective = "Industrial Revolution" } }; //Create the JSON file loader IAnswerDataJsonFileLoader fileLoader = new AnswerDataJsonFileLoader(); //Load the test file List <Answer> actualData = fileLoader.LoadAnswerDataFromFile(SingleAnswerFileName); //Compare the actual data to the expected data Assert.That(actualData.Count, Is.EqualTo(expectedData.Count)); expectedData.Zip(actualData, Tuple.Create) .ToList() .ForEach(dataTuple => DataComparers.CompareAnswers(dataTuple.Item1, dataTuple.Item2)); }