public async Task HandleErrorResponse()
        {
            var command = new GetSimilarCommand(MAuth.Object, "arroooo");

            var response = CreateResponseMessage(Encoding.UTF8.GetString(TagApiResponses.GetSimilarError));

            var parsed = await command.HandleResponse(response);

            Assert.IsFalse(parsed.Success);
            Assert.IsTrue(parsed.Status == LastResponseStatus.MissingParameters);
        }
        public async Task HandleErrorResponse()
        {
            var command = new GetSimilarCommand(MAuth.Object, "arroooo");

            var response = CreateResponseMessage(Encoding.UTF8.GetString(TagApiResponses.GetSimilarError));

            var parsed = await command.HandleResponse(response);

            Assert.IsFalse(parsed.Success);
            Assert.IsTrue(parsed.Status == LastResponseStatus.MissingParameters);
        }
        public async Task HandleSuccessResponse()
        {
            const string tagName = "daria";
            var          command = new GetSimilarCommand(MAuth.Object, tagName);

            var expectedTagNames = new[]
            {
                "road trip",
                "longing",
                "old school rap",
                "pj harvey",
                "girl band",
                "alt rock",
                "female rock",
                "90s",
                "post-grunge",
                "acid jazz"
            };
            var expectedTags = expectedTagNames.Select(tag => new LastTag
            {
                Name       = tag,
                Url        = new Uri(String.Format("http://www.last.fm/tag/{0}", Uri.EscapeUriString(tag))),
                RelatedTo  = tagName,
                Streamable = true
            }).ToList();

            expectedTags[0].Streamable = false;
            expectedTags[1].Streamable = null;

            var file     = GetFileContents("Tag.GetSimilarSuccess.json");
            var response = CreateResponseMessage(file);
            //var response = CreateResponseMessage(Encoding.UTF8.GetString(TagApiResponses.GetSimilarSuccess));
            var actual = await command.HandleResponse(response);

            Assert.IsTrue(actual.Skip(2).All(t => t.Streamable.GetValueOrDefault()));
            Assert.IsTrue(actual.All(t => t.RelatedTo == tagName));
            Assert.IsTrue(actual.Success);
            TestHelper.AssertSerialiseEqual(expectedTags, actual.ToList());
        }
        public async Task HandleSuccessResponse()
        {
            const string tagName = "daria";
            var command = new GetSimilarCommand(MAuth.Object, tagName);

            var expectedTagNames = new[]
            {
                "road trip",
                "longing",
                "old school rap",
                "pj harvey",
                "girl band",
                "alt rock",
                "female rock",
                "90s",
                "post-grunge",
                "acid jazz"
            };
            var expectedTags = expectedTagNames.Select(tag => new LastTag
            {
                Name = tag,
                Url = new Uri(String.Format("http://www.last.fm/tag/{0}", Uri.EscapeUriString(tag))),
                RelatedTo = tagName,
                Streamable = true
            }).ToList();

            expectedTags[0].Streamable = false;
            expectedTags[1].Streamable = null;
            
            var response = CreateResponseMessage(Encoding.UTF8.GetString(TagApiResponses.GetSimilarSuccess));
            var actual = await command.HandleResponse(response);

            Assert.IsTrue(actual.Skip(2).All(t => t.Streamable.GetValueOrDefault()));
            Assert.IsTrue(actual.All(t => t.RelatedTo == tagName));
            Assert.IsTrue(actual.Success);
            TestHelper.AssertSerialiseEqual(expectedTags, actual.ToList());
        }