public void Post_WithBadQuery_ReturnsErrors_With200()
        {
            // Arrange
            var expectedResult = ReportsControllerTestHelpers.FakeSqlErrors();
            // Act
            var result = controller.Post("badQuery".AsReportQuery()).AsCSharpObject <List <string> >();

            // Assert
            result.ShouldBeEquivalentTo(expectedResult, x => x.ExcludingMissingMembers());
        }
        public void Get_WithNoArgs_ReturnsJsonListOfAllReports()
        {
            // Arrange
            // we expect the returned object to have fields added by the mapper
            var expectedResult = ReportsControllerTestHelpers.FakeReportList().Select(report => map.Map <Domain.ReportDefinition, ReportDefinition>(report));

            // Act
            var result = controller.Get().AsCSharpObject <List <ReportDefinition> >();

            // Assert
            result.Should().HaveCount(2, because: "that's what the test object had");
            result.ShouldBeEquivalentTo(expectedResult);
        }
        public void Get_WithId_ReturnsSingleReport_WithSameId()
        {
            // Arrange: This only works because the IDs equal the index of the list members for the test class.
            var expectedResult = ReportsControllerTestHelpers.FakeReportList()[1];

            // Act
            var result = controller.Get("1").AsCSharpObject <ReportDefinition>();

            // Assert: It's unclear to me how we wind up with id, columns, and inputs, because we're not mapping to the view model this time.
            result.ShouldBeEquivalentTo(expectedResult, x => x
                                        .Excluding(field => field.id)
                                        .Excluding(field => field.columns)
                                        .Excluding(field => field.inputs)
                                        );
        }
        public void Get_WithFourArgs_ReturnsSingleReport_MatchingThoseParameters()
        {
            // this test is quick-and-dirty and needs serious help.
            // all it shows currently is that this method can match on a name instead of an ID.

            // Arrange
            var expectedResult = new List <dynamic> {
                (dynamic)ReportsControllerTestHelpers.FakeReportList()[0]
            };

            // Act
            var result = controller.Get("FakeReport", testStartDate, testEndDate, null)
                         .AsCSharpObject <List <ReportDefinition> >();

            // Assert
            result.ShouldBeEquivalentTo(expectedResult, x => x.ExcludingMissingMembers());
        }