public void WhenQueryingByNameReturnsExpectedResults()
            {
                var expectedResult = new Cwe {
                    CweId = "CWE-001", Name = "Name A: listed", Description = "Description A: listed.", Listed = true
                };
                var notExpectedResult1 = new Cwe {
                    CweId = "CWE-002", Name = "Name A: unlisted", Description = "Description A: unlisted.", Listed = false
                };
                var notExpectedResult2 = new Cwe {
                    CweId = "CWE-003", Name = "Name B", Description = "description B", Listed = true
                };

                var cweRepositoryMock = new Mock <IEntityRepository <Cwe> >();

                cweRepositoryMock
                .Setup(x => x.GetAll())
                .Returns(new[]
                {
                    expectedResult,
                    notExpectedResult1,
                    notExpectedResult2
                }.AsQueryable());

                var query        = new AutocompleteCweIdsQuery(cweRepositoryMock.Object);
                var queryResults = query.Execute("Name A");

                Assert.NotNull(queryResults);
                var singleResult = Assert.Single(queryResults.Results);

                // Only the listed element matching by name should be returned.
                Assert.Equal(expectedResult.Name, singleResult.Name);
                Assert.Equal(expectedResult.CweId, singleResult.CweId);
                Assert.Equal(expectedResult.Description, singleResult.Description);
            }
            public void WhenQueryingByIdReturnsExpectedResults(string queryString, string expectedCweIdStartString)
            {
                var expectedResult1 = new Cwe {
                    CweId = "CWE-011", Name = "Name A: listed", Description = "Description A: listed.", Listed = true
                };
                var notExpectedResult1 = new Cwe {
                    CweId = "CWE-012", Name = "Name A: unlisted", Description = "Description A: unlisted.", Listed = false
                };
                var expectedResult2 = new Cwe {
                    CweId = "CWE-013", Name = "Name B", Description = "description B", Listed = true
                };
                var expectedResult3 = new Cwe {
                    CweId = "CWE-014", Name = "Name C", Description = "description C", Listed = true
                };
                var expectedResult4 = new Cwe {
                    CweId = "CWE-015", Name = "Name D", Description = "description D", Listed = true
                };
                var expectedResult5 = new Cwe {
                    CweId = "CWE-016", Name = "Name E", Description = "description E", Listed = true
                };
                var notExpectedResult2 = new Cwe {
                    CweId = "CWE-017", Name = "Name F", Description = "description F", Listed = true
                };

                var cweRepositoryMock = new Mock <IEntityRepository <Cwe> >();

                cweRepositoryMock
                .Setup(x => x.GetAll())
                .Returns(new[]
                {
                    expectedResult1,
                    notExpectedResult1,
                    expectedResult2,
                    expectedResult3,
                    expectedResult4,
                    expectedResult5,
                    notExpectedResult2
                }.AsQueryable());

                var query        = new AutocompleteCweIdsQuery(cweRepositoryMock.Object);
                var queryResults = query.Execute(queryString);

                Assert.Equal(5, queryResults.Results.Count);
                Assert.True(queryResults.Success);
                Assert.Null(queryResults.ErrorMessage);

                Assert.All(
                    queryResults.Results,
                    r =>
                {
                    Assert.StartsWith(expectedCweIdStartString, r.CweId, StringComparison.OrdinalIgnoreCase);

                    // Only the listed elements with CWE-ID starting with the query string should be returned (up to 5 elements).
                    Assert.NotEqual(notExpectedResult1.CweId, r.CweId, StringComparer.OrdinalIgnoreCase);

                    // Sorted numerically, this is the 6th element in the resultset and should be filtered out (max 5).
                    Assert.NotEqual(notExpectedResult2.CweId, r.CweId, StringComparer.OrdinalIgnoreCase);
                });
            }
            public void ReturnsExpectedResultsIfQueryStringTooShort(string queryString)
            {
                var query        = new AutocompleteCweIdsQuery(Mock.Of <IEntityRepository <Cwe> >());
                var queryResults = query.Execute(queryString);

                Assert.False(queryResults.Success);
                Assert.Equal(Strings.AutocompleteCweIds_ValidationError, queryResults.ErrorMessage);
                Assert.Null(queryResults.Results);
            }