public void ParseFile_WithNoRecords_ReturnsError() { var mockCsvDataParser = Substitute.For <IDataParser <StageDischargeReadingRecord> >(); mockCsvDataParser.ParseInputData(Arg.Any <Stream>()).Returns((IEnumerable <StageDischargeReadingRecord>)null); var plugin = new StageDischargeReadingsPlugin(mockCsvDataParser); using (var stream = new MemoryStream(Encoding.ASCII.GetBytes("Nothing to see here folks..."))) { var results = plugin.ParseFile(stream, _mockAppender, _mockLogger); results.Status.Should().Be(ParseFileStatus.CannotParse); results.ErrorMessage.Should().Contain(StageDischargeReadingsPlugin.NoRecordsInInputFile); } }
public void ParseFile_WithSomeInvalidRecords_ReturnsError() { var mockCsvDataParser = Substitute.For <IDataParser <StageDischargeReadingRecord> >(); mockCsvDataParser.ParseInputData(Arg.Any <Stream>()).Returns(_fixture.Create <IEnumerable <StageDischargeReadingRecord> >()); mockCsvDataParser.Errors.Returns(_fixture.CreateMany <string>().ToArray()); mockCsvDataParser.ValidRecords.Returns(1); var plugin = new StageDischargeReadingsPlugin(mockCsvDataParser); using (var stream = new MemoryStream(Encoding.ASCII.GetBytes("Good and bad data"))) { var results = plugin.ParseFile(stream, _mockAppender, _mockLogger); results.Status.Should().Be(ParseFileStatus.SuccessfullyParsedButDataInvalid); results.ErrorMessage.Should().Contain(StageDischargeReadingsPlugin.InputFileContainsInvalidRecords); } }
public void ParseFile_WithOneValidRowInCsvInputFile_ReadsAndSavesStageDischargeRecordsAndReturnsSuccess() { using (var stream = CreateValidCsvFileStream()) { _mockAppender.GetLocationByIdentifier(Arg.Any <string>()) .Returns(LocationInfoHelper.GetTestLocationInfo(_fixture)); var results = _csvDataPlugin.ParseFile(stream, _mockAppender, _mockLogger); results.Status.Should().NotBe(ParseFileStatus.CannotParse); _mockAppender.Received().AddFieldVisit(Arg.Any <LocationInfo>(), Arg.Any <FieldVisitDetails>()); _mockAppender.Received(1).AddDischargeActivity(Arg.Any <FieldVisitInfo>(), Arg.Any <DischargeActivity>()); } }