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 GetUrl_AlbumIdIsNotNull_ReturnsUrlThatContainsAlbumId()
        {
            var albumCoverImageConfigurationFake = A.Fake <IAlbumCoverImageConfiguration>();

            A.CallTo(() => albumCoverImageConfigurationFake.UrlFormat).Returns("/def/ghi/{0}.jkl");

            var service = new AlbumCoverImageService(
                A.Fake <IAlbumHrefIdParser>(),
                albumCoverImageConfigurationFake,
                A.Fake <ISpotifyConfiguration>());

            var url = service.GetUrl("zxc");

            Assert.That(url, Is.EqualTo("/def/ghi/zxc.jkl"));
        }
        public void GetVirtualUrl_HrefIdParserReturnsId_ReturnsUrlThatContainsParsedId()
        {
            var albumHrefIdParser = A.Fake <IAlbumHrefIdParser>();

            A.CallTo(() => albumHrefIdParser.Parse(A <string> .Ignored)).Returns("abc");
            var albumCoverImageConfigurationFake = A.Fake <IAlbumCoverImageConfiguration>();

            A.CallTo(() => albumCoverImageConfigurationFake.VirtualUrlFormat).Returns("/def/ghi/{0}.jkl");

            var service = new AlbumCoverImageService(
                albumHrefIdParser,
                albumCoverImageConfigurationFake,
                A.Fake <ISpotifyConfiguration>());

            var url = service.GetVirtualUrl("jkl:mno:abc");

            Assert.That(url, Is.EqualTo("/def/ghi/abc.jkl"));
        }
        public void GetAlbumHref_VirtualUrlFileExtensionDoesNotMatchFormat_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("/abc/def/uio.wer"));
        }
        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"));
        }