public async Task UpdateConsentAsync(Client client, ClaimsPrincipal user, IEnumerable <string> scopes)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }

            if (client.AllowRememberConsent)
            {
                var subject  = user.GetSubjectId();
                var clientId = client.ClientId;

                if (scopes != null && scopes.Any())
                {
                    var consent = new Consent
                    {
                        Subject  = subject,
                        ClientId = clientId,
                        Scopes   = scopes
                    };
                    await _store.UpdateAsync(consent);
                }
                else
                {
                    await _store.RevokeAsync(subject, clientId);
                }
            }
        }
        public async Task UpdatingConsentShouldResultInNewConsentBeingReturned()
        {
            await _setup;
            var   consentToUpdate = _subjectCConsents.OrderBy(ClientIdOrdering).Skip(2).First();

            consentToUpdate.Scopes = new[] { "scope3", "scope4" };
            await _store.UpdateAsync(consentToUpdate);

            var stored = await _store.LoadAsync(consentToUpdate.Subject, consentToUpdate.ClientId);

            Assert.Equal(
                TestData.ToTestableString(consentToUpdate),
                TestData.ToTestableString(stored));
        }
        public ConsentStoreTests(PersistenceTestFixture data)
            : base(data)
        {
            _store            = Factory.Resolve <IConsentStore>();
            _subjectAConsents = new List <Consent>();
            _subjectBConsents = new List <Consent>();
            _subjectCConsents = new List <Consent>();
            List <Task> tasks = new List <Task>();

            foreach (var subject in new []
            {
                new
                {
                    Subject = SubjectA,
                    Consents = (List <Consent>)_subjectAConsents
                },
                new
                {
                    Subject = SubjectB,
                    Consents = (List <Consent>)_subjectBConsents
                },
                new
                {
                    Subject = SubjectC,
                    Consents = (List <Consent>)_subjectCConsents
                }
            })
            {
                for (int i = 0; i < 10; i++)
                {
                    var consent = new Consent()
                    {
                        ClientId = "ClientId" + i, Scopes = new[] { "scope1", "scope2" }, Subject = subject.Subject
                    };
                    subject.Consents.Add(consent);
                    tasks.Add(_store.UpdateAsync(consent));
                }
            }

            _setup = Task.WhenAll(tasks);
        }