public void Answer_When1AnswerOutOf4Datas_Then25PercentComplete()
        {
            //ARRANGE
            const string testName = "Test1";
            var listOfTestNames = new List<string> { testName };

            var mockedResourceLoader = new Mock<IResourceLoader>();
            var mockedResourceTest = new Mock<IResourceTest>();
            mockedResourceLoader.Setup(x => x.LoadResource())
                                .Returns(new List<IResourceTest> {mockedResourceTest.Object});
            mockedResourceTest.Setup(x => x.Name).Returns(testName);
            mockedResourceTest.Setup(x => x.Data).Returns(new List<DerDieDasData>
                                                              {
                                                                  new DerDieDasData("der, kommen, kommen", new ArticleFactory()),
                                                                  new DerDieDasData("der, kommen, kommen", new ArticleFactory()),
                                                                  new DerDieDasData("der, kommen, kommen", new ArticleFactory()),
                                                                  new DerDieDasData("der, kommen, kommen", new ArticleFactory())
                                                              });

            //ACT
            var derDieDasTest = new DerDieDasTest(mockedResourceLoader.Object);
            derDieDasTest.StartTest(listOfTestNames);
            derDieDasTest.Answer("Der", "kommen");
            var percentageComplete = derDieDasTest.PercentageComplete();

            //ASSERT
            Assert.Equal(25, percentageComplete);
        }
        public void Answer_When1Answer_ThenEndOfTestIsFalse()
        {
            //ARRANGE
            const string testName = "Test1";
            var listOfTestNames = new List<string> { testName };

            var mockedResourceLoader = new Mock<IResourceLoader>();
            var mockedResourceTest = new Mock<IResourceTest>();
            mockedResourceLoader.Setup(x => x.LoadResource())
                                .Returns(new List<IResourceTest> { mockedResourceTest.Object });
            mockedResourceTest.Setup(x => x.Name).Returns(testName);
            mockedResourceTest.Setup(x => x.Data).Returns(new List<DerDieDasData>
                                                              {
                                                                  new DerDieDasData("Der, kommen, kommen", new ArticleFactory()),
                                                                  new DerDieDasData("Der, kommen, kommen", new ArticleFactory()),
                                                                  new DerDieDasData("Der, kommen, kommen", new ArticleFactory()),
                                                                  new DerDieDasData("Der, kommen, kommen", new ArticleFactory())
                                                              });

            //ACT
            var derDieDasTest = new DerDieDasTest(mockedResourceLoader.Object);
            derDieDasTest.StartTest(listOfTestNames);
            derDieDasTest.Answer("der", "kommen");
            var endOfTest = derDieDasTest.EndOfTest;

            //ASSERT
            Assert.False(endOfTest);
        }
        public void StartTest_WhenNullSpecified_ThenThrowsArgumentNullException()
        {
            //ARRANGE
            var mockedResourceLoader = new Mock<IResourceLoader>();

            //ACT
            var derDieDasTest = new DerDieDasTest(mockedResourceLoader.Object);
            Assert.ThrowsDelegate testDelegate = () => derDieDasTest.StartTest(null);

            //ASSERT
            Assert.Throws<ArgumentNullException>(testDelegate);
        }
        public void StartTest_WhenEmptyListSpecified_ThenPercentagePluralCorrectWillBeZero()
        {
            //ARRANGE
            var mockedResourceLoader = new Mock<IResourceLoader>();

            //ACT
            var derDieDasTest = new DerDieDasTest(mockedResourceLoader.Object);
            derDieDasTest.StartTest(new List<string>());
            var percentagePluralCorrect = derDieDasTest.PercentagePluralCorrect();

            //ASSERT
            Assert.Equal(0, percentagePluralCorrect);
        }
        public void StartTest_WhenEmptyListSpecified_ThenCurrentWillBeNull()
        {
            //ARRANGE
            var mockedResourceLoader = new Mock<IResourceLoader>();

            //ACT
            var derDieDasTest = new DerDieDasTest(mockedResourceLoader.Object);
            derDieDasTest.StartTest(new List<string>());
            var current = derDieDasTest.Current();

            //ASSERT
            Assert.Null(current);
        }
        public void PercentagePluralCorrect_WhenLoaderReturnsZero_ThenExpectZeroPercent()
        {
            //ARRANGE
            var mockedResourceLoader = new Mock<IResourceLoader>();
            mockedResourceLoader.Setup(x => x.LoadResource())
                                .Returns(new List<ResourceTest>());

            //ACT
            var derDieDasTest = new DerDieDasTest(mockedResourceLoader.Object);

            //ASSERT
            Assert.Equal(0, derDieDasTest.PercentagePluralCorrect());
        }
        public void Constructor_WhenResourceLoaderReturnsEmptyList_ThenAvailableTestsIsEmpty()
        {
            //ARRANGE
            var mockedResourceLoader = new Mock<IResourceLoader>();
            mockedResourceLoader.Setup(x => x.LoadResource()).Returns(new List<ResourceTest>());

            //ACT
            var derDieDasTest = new DerDieDasTest(mockedResourceLoader.Object);

            //ASSERT
            Assert.Empty(derDieDasTest.AvailableTests);
        }
        public void Constructor_WhenLoaderReturnsItems_ThenAvailableListContainsTheseItems()
        {
            //ARRANGE
            var mockedResourceLoader = new Mock<IResourceLoader>();
            mockedResourceLoader.Setup(x => x.LoadResource())
                                .Returns(new List<ResourceTest> {new ResourceTest("Fred"), new ResourceTest("Squid")});

            //ACT
            var derDieDasTest = new DerDieDasTest(mockedResourceLoader.Object);

            //ASSERT
            var availableTestsList = derDieDasTest.AvailableTests.ToList();
            Assert.Equal(2, availableTestsList.Count());
            Assert.Contains("Fred", availableTestsList);
            Assert.Contains("Squid", availableTestsList);
        }
        public void Answer_WhenNullPluralSpecified_ThenThrowsArgumentNullException()
        {
            //ARRANGE
            var mockedResourceLoader = new Mock<IResourceLoader>();

            //ACT
            var derDieDasTest = new DerDieDasTest(mockedResourceLoader.Object);
            derDieDasTest.StartTest(new List<string>());
            Assert.ThrowsDelegate testDelegate = () => derDieDasTest.Answer("Der", null);

            //ASSERT
            Assert.Throws<ArgumentNullException>(testDelegate);
        }