public void GetAlbumHref_VirtualUrlIsNull_ThrowsArgumentNullException()
        {
            var service = new AlbumCoverImageService(
                A.Fake <IAlbumHrefIdParser>(),
                A.Fake <IAlbumCoverImageConfiguration>(),
                A.Fake <ISpotifyConfiguration>());

            Assert.Throws <ArgumentNullException>(() => service.GetAlbumHref(null));
        }
        public void GetAlbumHref_VirtualUrlSegmentsDoesNotMatchFormat_ThrowsNotSupportedException()
        {
            var albumHrefIdParser = A.Fake <IAlbumHrefIdParser>();

            A.CallTo(() => albumHrefIdParser.Parse("qwe:rty:uio")).Returns("uio");
            var albumCoverImageConfigurationFake = A.Fake <IAlbumCoverImageConfiguration>();

            A.CallTo(() => albumCoverImageConfigurationFake.VirtualUrlFormat).Returns("/abc/def/{0}.jkl");
            A.CallTo(() => albumCoverImageConfigurationFake.VirtualUrlFileExtension).Returns(".jkl");
            A.CallTo(() => albumCoverImageConfigurationFake.UrlFormat).Returns("/mno/{0}.stu");
            var spotifyConfigurationFake = A.Fake <ISpotifyConfiguration>();

            A.CallTo(() => spotifyConfigurationFake.AlbumHrefFormat).Returns("qwe:rty:{0}");

            var service = new AlbumCoverImageService(
                albumHrefIdParser,
                albumCoverImageConfigurationFake,
                spotifyConfigurationFake);

            Assert.Throws <NotSupportedException>(() => service.GetAlbumHref("/def/uio.jkl"));
            Assert.Throws <NotSupportedException>(() => service.GetAlbumHref("/qwe/def/uio.jkl"));
        }
        public void GetAlbumHref_VirtualUrlDoesMatchFormat_ReturnsAlbumHref()
        {
            var albumHrefIdParser = A.Fake <IAlbumHrefIdParser>();

            A.CallTo(() => albumHrefIdParser.Parse("qwe:rty:uio")).Returns("uio");
            var albumCoverImageConfigurationFake = A.Fake <IAlbumCoverImageConfiguration>();

            A.CallTo(() => albumCoverImageConfigurationFake.VirtualUrlFormat).Returns("/abc/def/{0}.jkl");
            A.CallTo(() => albumCoverImageConfigurationFake.VirtualUrlFileExtension).Returns(".jkl");
            A.CallTo(() => albumCoverImageConfigurationFake.UrlFormat).Returns("/mno/{0}.stu");
            var spotifyConfigurationFake = A.Fake <ISpotifyConfiguration>();

            A.CallTo(() => spotifyConfigurationFake.AlbumHrefFormat).Returns("qwe:rty:{0}");

            var service = new AlbumCoverImageService(
                albumHrefIdParser,
                albumCoverImageConfigurationFake,
                spotifyConfigurationFake);

            var albumHref = service.GetAlbumHref("/abc/def/uio.jkl");

            Assert.That(albumHref, Is.EqualTo("qwe:rty:uio"));
        }