public void RequestsTheCorrectUrlWithApiOptions()
            {
                var expectedUrl = string.Format("repos/{0}/{1}/releases/1/assets", "fake", "repo");

                var gitHubClient = Substitute.For<IGitHubClient>();
                var client = new ObservableReleasesClient(gitHubClient);

                var options = new ApiOptions
                {
                    StartPage = 1,
                    PageCount = 1,
                    PageSize = 1
                };

                client.GetAllAssets("fake", "repo", 1, options);
                
                gitHubClient.Connection.Received(1).Get<List<ReleaseAsset>>(
                    Arg.Is<Uri>(u => u.ToString() == expectedUrl), 
                    Arg.Is<IDictionary<string, string>>(dictionary => dictionary.Count == 2), 
                    null);
            }
            public void EnsuresNonNullArguments()
            {
                var client = new ObservableReleasesClient(Substitute.For<IGitHubClient>());

                Assert.Throws<ArgumentNullException>(() => client.GetAllAssets("owner", null, 1));
                Assert.Throws<ArgumentNullException>(() => client.GetAllAssets(null, "name", 1));

                Assert.Throws<ArgumentNullException>(() => client.GetAllAssets(null, "name", 1, ApiOptions.None));
                Assert.Throws<ArgumentNullException>(() => client.GetAllAssets("owner", null, 1, ApiOptions.None));
                Assert.Throws<ArgumentNullException>(() => client.GetAllAssets("owner", "name", 1, null));

                Assert.Throws<ArgumentException>(() => client.GetAllAssets("", "name", 1));
                Assert.Throws<ArgumentException>(() => client.GetAllAssets("owner", "", 1));
            }
            public void RequestsTheCorrectUrl()
            {
                var gitHubClient = Substitute.For<IGitHubClient>();
                var client = new ObservableReleasesClient(gitHubClient);

                client.GetAllAssets("fake", "repo", 1);

                gitHubClient.Connection.Received(1).Get<List<ReleaseAsset>>(
                    new Uri("repos/fake/repo/releases/1/assets", UriKind.Relative), Args.EmptyDictionary, null);
            }