예제 #1
0
        public async Task WhenProviderIdIsProvidedAndIsValid_TheStatusOfTheExistingRequestIsUpdated()
        {
            string pid     = "someId";
            var    request = new Request
            {
                ProviderId = pid,
                Status     = RequestStatus.Assigned
            };
            var command = new AddRequestCommand {
                Request = request
            };

            var options = this.CreateNewContextOptions();

            using (var context = new AllReadyContext(options)) {
                context.Requests.Add(new Request {
                    ProviderId = pid,
                    Status     = RequestStatus.Assigned
                });
                await context.SaveChangesAsync();
            }

            using (var context = new AllReadyContext(options)) {
                var geocoder = new Mock <IGeocoder>();
                AddRequestCommandHandler sut = new AddRequestCommandHandler(context, geocoder.Object);


                await sut.Handle(command);
            }

            using (var context = new AllReadyContext(options)) {
                var entity = context.Requests.FirstOrDefault(x => x.ProviderId == pid);
                Assert.Equal(entity.Status, RequestStatus.Assigned);
            }
        }
예제 #2
0
        public async Task WhenProviderIdIsProvidedAndIsValid_TheStatusIsTheSameAsTheRequestAndIdIsTheSame()
        {
            string pid     = "someId";
            Guid   rid     = Guid.NewGuid();
            var    request = new Request
            {
                ProviderId = pid,
                Status     = RequestStatus.Assigned
            };
            var command = new AddRequestCommand
            {
                Request = request
            };

            Request returnedRequest = new Request
            {
                ProviderId = pid,
                RequestId  = rid,
                Status     = RequestStatus.UnAssigned
            };

            _dataAccess.Setup(x => x.GetRequestByProviderIdAsync(pid)).ReturnsAsync(returnedRequest);

            await _sut.Handle(command);

            Assert.Equal(rid, returnedRequest.RequestId);
            Assert.Equal(RequestStatus.Assigned, returnedRequest.Status);
        }
        public async Task WhenProviderIdIsProvidedAndIsValid_TheStatusOfTheExistingRequestIsUpdated()
        {
            string pid = "someId";
            var request = new Request
            {
                ProviderId = pid,
                Status = RequestStatus.Assigned
            };
            var command = new AddRequestCommand{Request = request};

            var options = this.CreateNewContextOptions();

            using (var context = new AllReadyContext(options)) {
                context.Requests.Add(new Request {
                    ProviderId = pid,
                    Status = RequestStatus.Assigned
                });
                await context.SaveChangesAsync();
            }

            using (var context = new AllReadyContext(options)) {
                var geocoder = new Mock<IGeocoder>();
                AddRequestCommandHandler sut = new AddRequestCommandHandler(context, geocoder.Object);


                await sut.Handle(command);
            }

            using (var context = new AllReadyContext(options)) {
                var entity = context.Requests.FirstOrDefault(x => x.ProviderId == pid);
                Assert.Equal(entity.Status, RequestStatus.Assigned);
            }
        }
예제 #4
0
        public async Task <IActionResult> AddRequest(string tmdbid)
        {
            var requests = await _context.Request.ToListAsync();

            var currentUser = await _userManager.GetUserAsync(User);

            var movie = await _mediator.Send(new GetSingleMovieRequest { TmdbId = tmdbid });

            if (await _context.Request.Where(x => x.UserId == currentUser.Id && x.MovieId == tmdbid).CountAsync() > 0)
            {
                return(RedirectToAction("Show", "Movie", new { slug = movie.Movie.TitleSlug }));
            }

            var command = new AddRequestCommand
            {
                Request = new UserRequest()
                {
                    Status  = false,
                    MovieId = tmdbid,
                    UserId  = currentUser.Id
                }
            };

            await _mediator.Send(command);

            return(RedirectToAction("Show", "Movie", new { slug = movie.Movie.TitleSlug }));
        }
예제 #5
0
        public RequestForQuoteToolBarViewModel(IOptionRequestParser optionRequestParser, IClientManager clientManager, IBookManager bookManager)
        {
            AddNewRequestCommand     = new AddRequestCommand(this);
            ClearNewRequestCommand   = new ClearNewRequestCommand(this);
            GetTodaysRequestsCommand = new GetTodaysRequestsCommand(this);

            this.optionRequestParser = optionRequestParser;
            this.clientManager       = clientManager;
            this.bookManager         = bookManager;

            InitializeCollections();
            InitializeEventSubscriptions();
        }
예제 #6
0
        public async Task WhenNoProviderIdIsProvided_TheStatusIsUnassignedAndIdIsNotNull()
        {
            var request = new Request();
            var command = new AddRequestCommand
            {
                Request = request
            };

            var result = await _sut.Handle(command);

            Assert.NotNull(request.RequestId);
            Assert.Equal(RequestStatus.UnAssigned, request.Status);
        }
        public async Task WhenNoProviderIdIsProvided_TheStatusIsUnassignedAndIdIsNotNull()
        {
            var request = new Request();
            var command = new AddRequestCommand {Request = request};

            var geocoder = new Mock<IGeocoder>();
            AddRequestCommandHandler sut = new AddRequestCommandHandler(this.Context, geocoder.Object);
            var result = await sut.Handle(command);

            Assert.NotNull(request.RequestId);
            Assert.Equal(RequestStatus.Unassigned, request.Status);

        }
        public async Task HandleReturnsNullWhenNoErrorsOccur() {

            var command = new AddRequestCommand {
                Request = new Request {ProviderId = "successId"}
            };

            var geocoder = new Mock<IGeocoder>();
            AddRequestCommandHandler sut = new AddRequestCommandHandler(this.Context, geocoder.Object);

            var result = await sut.Handle(command);

            Assert.Null(result);
        }
예제 #9
0
        public async Task HandleReturnsNullWhenNoErrorsOccur()
        {
            var command = new AddRequestCommand
            {
                Request = new Request
                {
                    ProviderId = "successId"
                }
            };

            var result = await _sut.Handle(command);

            Assert.Null(result);
        }
예제 #10
0
        public async Task WhenNoProviderIdIsProvided_TheStatusIsUnassignedAndIdIsNotNull()
        {
            var request = new Request();
            var command = new AddRequestCommand {
                Request = request
            };

            var geocoder = new Mock <IGeocoder>();
            AddRequestCommandHandler sut = new AddRequestCommandHandler(this.Context, geocoder.Object);
            var result = await sut.Handle(command);

            Assert.NotNull(request.RequestId);
            Assert.Equal(RequestStatus.Unassigned, request.Status);
        }
예제 #11
0
        public async Task HandleReturnsNullWhenNoErrorsOccur()
        {
            var command = new AddRequestCommand {
                Request = new Request {
                    ProviderId = "successId"
                }
            };

            var geocoder = new Mock <IGeocoder>();
            AddRequestCommandHandler sut = new AddRequestCommandHandler(this.Context, geocoder.Object);

            var result = await sut.Handle(command);

            Assert.Null(result);
        }
예제 #12
0
        public async Task AddRequestTest()
        {
            // Arrange
            var command = new AddRequestCommand {
                Request = new Domain.UserRequest {
                    Id = 2, MovieId = "577922", UserId = "bacbb67d-819e-4e7b-bb29-c81ff99b5d1d"
                }
            };
            var handler = new AddRequestHandler(_mediaDbContext);

            // Act
            var response = await handler.Handle(command, new System.Threading.CancellationToken());

            // Assert
            var fetchedRequest = _mediaDbContext.Request.First();

            Assert.IsNotNull(fetchedRequest);
        }
예제 #13
0
        public async Task <ICollection <LdapPacket> > Execute(AddRequestCommand addRequestCommand)
        {
            var addRequest            = addRequestCommand.ProtocolOperation.Operation as AddRequest;
            var dn                    = addRequest.Entry.Value;
            var objectClassAttributes = addRequest.Attributes.Values.Where(v => v.Type.Value == _options.ObjectClassAttributeName);

            if (!objectClassAttributes.Any())
            {
                throw new LdapException(string.Format(Global.AttributeIsMissing, _options.ObjectClassAttributeName), LDAPResultCodes.Other, dn);
            }

            var existingRepresentation = await _ldapQueryStore.Get(dn);

            if (existingRepresentation != null)
            {
                throw new LdapException(string.Format(Global.EntryAlreadyExists, dn), LDAPResultCodes.EntryAlreadyExists, dn);
            }

            var parentDN             = dn.ExtractParentDN();
            var parentRepresentation = await _ldapQueryStore.Get(parentDN);

            if (parentRepresentation == null)
            {
                throw new LdapException(string.Format(Global.ParentDoesntExist, parentDN), LDAPResultCodes.NoSuchObject, parentDN);
            }

            var existingObjectClasses = await _ldapQueryStore.GetByAttributes(objectClassAttributes.Select(attr => new KeyValuePair <string, string>(_options.NameAttributeName, attr.Vals.Values.First().Value)).ToList());

            var mustAttributeTypes = existingObjectClasses.SelectMany(obj => obj.Attributes.Where(attr => attr.Name == _options.MustAttributeName));
            var mayAttributeTypes  = existingObjectClasses.SelectMany(obj => obj.Attributes.Where(attr => attr.Name == _options.MayAttributeName));
            var attributeTypes     = new List <string>();

            attributeTypes.AddRange(mustAttributeTypes.SelectMany(m => m.Values));
            attributeTypes.AddRange(mayAttributeTypes.SelectMany(m => m.Values));
            var existingObjectClassNames = existingObjectClasses.Select(entry => entry.Attributes.First(attr => attr.Name == _options.NameAttributeName).Values.First());
            var unknownObjectClasses     = objectClassAttributes.Where(obj => !existingObjectClassNames.Contains(obj.Vals.Values.First().Value)).Select(kvp => kvp.Vals.Values.First().Value);

            if (unknownObjectClasses.Any())
            {
                throw new LdapException(string.Format(Global.UnknownObjectClasses, string.Join(",", unknownObjectClasses)), LDAPResultCodes.Other, dn);
            }

            var missingRequiredAttributes = mustAttributeTypes.Where(attr => !addRequest.Attributes.Values.Any(a => attr.Values.Contains(a.Type.Value)));

            if (missingRequiredAttributes.Any())
            {
                throw new LdapException(string.Format(Global.RequiredAttributeMissing, string.Join(",", missingRequiredAttributes.SelectMany(m => m.Values))), LDAPResultCodes.Other, dn);
            }

            var undefinedAttributes = addRequest.Attributes.Values.Where(attr => !attributeTypes.Any(d => d.Equals(attr.Type.Value, StringComparison.InvariantCultureIgnoreCase)));

            if (undefinedAttributes.Any())
            {
                throw new LdapException(string.Format(Global.AttributesUndefined, string.Join(",", undefinedAttributes.Select(a => a.Type.Value))), LDAPResultCodes.Other, dn);
            }

            var record = new LDAPEntry
            {
                DistinguishedName = dn,
                Attributes        = new List <LDAPEntryAttribute>()
            };
            var attributes = await _ldapQueryStore.GetByAttributes(attributeTypes.Select(attr => new KeyValuePair <string, string>(_options.NameAttributeName, attr)).ToList());

            foreach (var attr in addRequest.Attributes.Values)
            {
                var attribute = attributes.First(a => a.Attributes.Any(at => at.Name == _options.NameAttributeName && at.Values.Contains(attr.Type.Value)));
                CheckSyntax(attribute, attr, dn);
                var existingAttributes = addRequest.Attributes.Values.Where(a => a.Type.Value == attr.Type.Value);
                if (IsSingleValue(attribute) && existingAttributes.Count() > 1)
                {
                    throw new LdapException(string.Format(Global.SingleValue, attr.Type.Value), LDAPResultCodes.AttributeOrValueExists, dn);
                }

                record.Attributes.Add(new LDAPEntryAttribute
                {
                    Id     = Guid.NewGuid().ToString(),
                    Name   = attr.Type.Value,
                    Values = attr.Vals.Values.Select(v => v.Value).ToList()
                });
            }

            _ldapCommandStore.Add(record);
            await _ldapCommandStore.SaveChanges();

            var donePacket = new LdapPacket
            {
                MessageId         = addRequestCommand.MessageId,
                ProtocolOperation = new DERProtocolOperation
                {
                    Operation = new AddResponse
                    {
                        Result = new LDAPResult
                        {
                            MatchedDN  = addRequest.Entry,
                            ResultCode = new DEREnumerated <LDAPResultCodes>
                            {
                                Value = LDAPResultCodes.Success
                            },
                            DiagnosticMessage = new DEROctetString(string.Empty)
                        }
                    }
                }
            };

            return(new List <LdapPacket>
            {
                donePacket
            });
        }
예제 #14
0
 public async Task AddRequest(AddRequestCommand command, CancellationToken cancellationToken)
 {
     await _mediator.Send(command, cancellationToken);
 }