public void TestRequestWithResponse(int httpMethod)
        {
            var parameters = new Dictionary<string, object> { { "p1", "2" } };
            var method = (HttpMethod)httpMethod;
            var bytes = new byte[] { 1, 2, 3, 4 };
            var scAccessToken = new SCAccessToken
            {
                AccessToken = "aToken"
            };

            var expected = new EmptyClass();

            using (mocks.Record())
            {
                var uriBuilder = NewMock<IUriBuilder>();
                uriBuilder.Expect(f => f.AddCredentials(scCredentials, scAccessToken)).Return(uriBuilder);
                uriBuilderFactory.Expect(f => f.Create(Domain.Api.GetParameterName() + "prefix/command.json")).Return(uriBuilder);

                webGateway.Expect(f => f.Request(uriBuilder, method, parameters, bytes, scAccessToken.AccessToken)).Return("response");

                serializer.Expect(f => f.Deserialize<EmptyClass>("response")).Return(expected);
            }
            
            var soundCloudRawClient = new SoundCloudRawClient(scCredentials, uriBuilderFactory, webGateway, serializer)
            {
                AccessToken = scAccessToken
            };
            var actual = soundCloudRawClient.Request<EmptyClass>("prefix", "command", method, parameters, bytes, "json", Domain.Api);

            Assert.AreEqual(expected, actual);
        }
        public IUriBuilder AddCredentials(SCCredentials credentials, SCAccessToken accessToken)
        {
            if (credentials == null)
                return this;

            if (accessToken != null)
            {
                AddToken(accessToken.AccessToken);
            }

            return AddClientId(credentials.ClientId);
        }
        internal SoundCloudClient(SCAccessToken accessToken, ISubresourceFactory subresourceFactory)
        {
            this.subresourceFactory = subresourceFactory;

            CurrentToken = accessToken;

            Users = subresourceFactory.CreateUsers();
            Tracks = subresourceFactory.CreateTracks();
            Me = subresourceFactory.CreateMe();
            Groups = subresourceFactory.CreateGroups();
            Resolve = subresourceFactory.CreateResolve();
            OEmbed = subresourceFactory.CreateOEmbed();
        }
        public AccessToken Convert(SCAccessToken accessToken)
        {
            if (accessToken == null)
            {
                return null;
            }

            return new AccessToken
            {
                Token = accessToken.AccessToken,
                ExpiresIn = (int)accessToken.ExpiresIn.TotalSeconds,
                RefreshToken = accessToken.RefreshToken,
                Scope = accessToken.Scope.GetParameterName()
            };
        }
        public ISoundCloudClient Connect(SCAccessToken accessToken)
        {
            var credentials = new SCCredentials();

            var soundCloudRawClient = soundCloudRawClientFactory.Create(credentials);

            soundCloudRawClient.AccessToken = accessToken;

            var soundCloudClient = soundCloudClientBuilder.Build(soundCloudRawClient);
            return soundCloudClient;
        }