public void Serialize_NullFilePath_Throws()
        {
            var       serializer    = CreateSerializer();
            Subtitles stubSubtitles = SubtitlesTests.CreateSubtitles1();
            FilePath  nullFilePath  = null;

            Assert.Throws <ArgumentNullException>(
                () => serializer.Serialize(stubSubtitles, nullFilePath));
        }
        public void Parse_SuccessfulParsing_ReturnsSubtitles()
        {
            var expectedSubtitles   = SubtitlesTests.CreateSubtitles1();
            var stubSubtitlesParser = Substitute.For <ISubtitlesParser>();

            stubSubtitlesParser
            .Parse(Arg.Any <UnvalidatedSubtitles>())
            .Returns(expectedSubtitles);
            var parser = CreateParser(stubSubtitlesParser);

            var actualSubtitles = parser.Parse(new FilePath("file.srt"));

            Assert.AreEqual(
                expectedSubtitles,
                actualSubtitles);
        }
        public void Serialize_WritesSubtitlesToGivenFile()
        {
            var subsToSerialize = new UnvalidatedSubtitles(
                new List <UnvalidatedSubtitle> {
                new UnvalidatedSubtitle(
                    new List <CharacterLine> {
                    new CharacterLine("1"),
                    new CharacterLine("First line"),
                    new CharacterLine("Second line")
                }),
                new UnvalidatedSubtitle(
                    new List <CharacterLine> {
                    new CharacterLine("2"),
                    new CharacterLine("Subtitle 2")
                })
            });

            var stubMapper = Substitute.For <ISubtitlesMapper>();

            stubMapper
            .Map(Arg.Any <Subtitles>())
            .Returns(subsToSerialize);

            var expectedLines = new List <CharacterLine> {
                new CharacterLine("1"),
                new CharacterLine("First line"),
                new CharacterLine("Second line"),
                new CharacterLine(string.Empty),
                new CharacterLine("2"),
                new CharacterLine("Subtitle 2"),
                new CharacterLine(string.Empty)
            };

            var mockWriter = Substitute.For <IFileLineWriter>();
            var serializer = CreateSerializer(mockWriter, stubMapper);

            var stubSubtitles = SubtitlesTests.CreateSubtitles1();
            var stubPath      = new FilePath("/a/path.srt");

            serializer.Serialize(stubSubtitles, stubPath);

            mockWriter.Received()
            .WriteLines(
                Arg.Is(stubPath),
                Arg.Is <List <CharacterLine> >(
                    l => l.SequenceEqual(expectedLines)));
        }
        public void Serialize_WriterThrows_ThrowsSameExceptionAsWriter()
        {
            var stubWriter        = Substitute.For <IFileLineWriter>();
            var expectedException = new Exception();

            stubWriter
            .When(w => w.WriteLines(Arg.Any <FilePath>(), Arg.Any <IEnumerable <CharacterLine> >()))
            .Do(w => throw expectedException);

            var serializer = CreateSerializer(stubWriter);

            var stubSubtitles = SubtitlesTests.CreateSubtitles1();
            var stubPath      = new FilePath("/a/path.srt");

            var actualException = Assert.Throws <Exception>(
                () => serializer.Serialize(stubSubtitles, stubPath));

            Assert.AreEqual(expectedException, actualException);
        }