Example #1
0
        public PostInitialProcessDocumentResponse ExecutePost(PostInitialProcessDocumentRequest request)
        {
            MatProcessData mappedRequest   = ProcessDataFactory.CreateProcessDataObject(request); //mapping request into to be inserted domain object
            string         gatewayResponse = _processDataGateway.PostInitialProcessDocument(mappedRequest);

            return(new PostInitialProcessDocumentResponse(request, gatewayResponse, DateTime.Now));
        }
Example #2
0
        public void given_postInitialProcessDocumentRequest_object_when_createProcessDataObject_factory_method_is_called_it_returns_correctly_populated_processData_domain_object()
        {
            //arrange
            PostInitialProcessDocumentRequest requestObject = MatProcessDataHelper.CreatePostInitialProcessDocumentRequestObject();

            //act
            var domainObject = ProcessDataFactory.CreateProcessDataObject(requestObject);

            //assert
            Assert.NotNull(domainObject);
            Assert.IsInstanceOf <MatProcessData>(domainObject);
            Assert.AreEqual(requestObject.processRef, domainObject.Id);
            Assert.AreEqual(requestObject.processType.value, domainObject.ProcessType.value);
            Assert.AreEqual(requestObject.processType.name, domainObject.ProcessType.name);

            Assert.NotNull(domainObject.DateCreated);
            Assert.NotNull(domainObject.DateLastModified);
            Assert.AreEqual(domainObject.DateCreated, domainObject.DateLastModified); //DateLastModified should be equal to the date of creation because the test is for an object that is created now.
            Assert.AreEqual(DateTime.MinValue, domainObject.DateCompleted);

            Assert.False(domainObject.ProcessDataAvailable);
            Assert.AreEqual(requestObject.processDataSchemaVersion, domainObject.ProcessDataSchemaVersion);
            Assert.AreEqual("Not completed", domainObject.ProcessStage); //it's not confirmed yet whether it's going to be int or string
            Assert.Null(domainObject.LinkedProcessId);

            // Assert.AreEqual(new { }, domainObject.PreProcessData); //Causes error --> Expected: <{ }> (<>f__AnonymousType0); But was:  <{ }> (<> f__AnonymousType0)
            Assert.AreEqual(0, domainObject.PreProcessData.GetType().GetProperties().Count()); // using reflections, because the above won't work
            Assert.AreEqual(0, domainObject.ProcessData.GetType().GetProperties().Count());
            Assert.AreEqual(0, domainObject.PostProcessData.GetType().GetProperties().Count());
        }
Example #3
0
        static void Main(string[] args)
        {
            List <Model.BetEasyModel> betEasyModels = new List <Model.BetEasyModel>();
            DirectoryInfo             feedData      = new DirectoryInfo("FeedData");

            FileInfo[] files = feedData.GetFiles();
            foreach (var file in files)
            {
                IProcessData processData = ProcessDataFactory.GetProcessDataType(file.Extension.ToLower());
                if (processData != null)
                {
                    var model = processData.Transform(file);
                    if (model != null)
                    {
                        betEasyModels.AddRange(model);
                    }
                }
            }

            betEasyModels = betEasyModels.OrderBy(t => t.Price).ToList();

            foreach (var model in betEasyModels)
            {
                Console.WriteLine(string.Format("Horse Name : {0}   Price : {1}", model.HorseName, model.Price));
            }

            Console.ReadLine();
        }
        public void given_the_matProcessData_domain_object_when_postInitialProcessDocument_gateway_method_is_called_then_the_number_of_documents_in_the_database_increases_by_one() //test that checks whether the db doesn't get cleared or overwritten somehow upon insertion
        {
            //arrange
            var unclearedDocumentCount = collection.CountDocuments(Builders <BsonDocument> .Filter.Empty); //did some testing around this, seems like the database doesn't get cleared after every test. Depending on the ordering, it might not actually be empty at the start of this test. When this is unaccounted for, it makes this test fail.

            //pre-insert between 0 and 7 documents into database, so that it wouldn't be necessarily empty (triangulation)
            int preInsertedDocumentCount = _faker.Random.Int(0, 7);

            for (int i = preInsertedDocumentCount; i > 0; i--)
            {
                MatProcessData preInsertedDomainObject = ProcessDataFactory.CreateProcessDataObject(MatProcessDataHelper.CreatePostInitialProcessDocumentRequestObject());
                collection.InsertOne(BsonDocument.Parse(JsonConvert.SerializeObject(preInsertedDomainObject)));
            }

            //a new object that will be inserted upon gateway call
            MatProcessData toBeInsertedDomainObject = ProcessDataFactory.CreateProcessDataObject(MatProcessDataHelper.CreatePostInitialProcessDocumentRequestObject());

            //act
            processDataGateway.PostInitialProcessDocument(toBeInsertedDomainObject);

            //assert
            var startingDocumentCount = unclearedDocumentCount + preInsertedDocumentCount;

            Assert.AreEqual(startingDocumentCount + 1, collection.CountDocuments(Builders <BsonDocument> .Filter.Empty));
        }
        public void given_the_double_insert_of_matProcessData_domain_object_when_postInitialProcessDocument_gateway_method_is_called_then_conflict_exception_is_thrown()
        {
            //arrange
            MatProcessData domainObject = ProcessDataFactory.CreateProcessDataObject(MatProcessDataHelper.CreatePostInitialProcessDocumentRequestObject());

            //act
            string response_Id = processDataGateway.PostInitialProcessDocument(domainObject);                     //first insert.

            Assert.Throws <ConflictException>(() => processDataGateway.PostInitialProcessDocument(domainObject)); //the second document insertion happends, while asserting.
        }
        public void given_the_matProcessData_domain_object_when_postInitialProcessDocument_gateway_method_is_called_then_it_returns_id_of_the_inserted_document()
        {
            //arrange
            MatProcessData domainObject = ProcessDataFactory.CreateProcessDataObject(MatProcessDataHelper.CreatePostInitialProcessDocumentRequestObject());

            //act
            string response_Id = processDataGateway.PostInitialProcessDocument(domainObject);

            //assert
            Assert.AreEqual(domainObject.Id, response_Id);
        }
        public void given_the_matProcessData_domain_object_when_postInitialProcessDocument_gateway_method_is_called_then_the_parsed_object_gets_added_into_the_database()
        {
            //arrange
            MatProcessData domainObject = ProcessDataFactory.CreateProcessDataObject(MatProcessDataHelper.CreatePostInitialProcessDocumentRequestObject());

            //act
            processDataGateway.PostInitialProcessDocument(domainObject);

            //assert
            var documentFromDB = BsonSerializer.Deserialize <MatProcessData>(collection.FindAsync(Builders <BsonDocument> .Filter.Eq("_id", domainObject.Id)).Result.FirstOrDefault());

            Assert.AreEqual(domainObject.Id, documentFromDB.Id);
            Assert.AreEqual(domainObject.ProcessType.value, documentFromDB.ProcessType.value);
            Assert.AreEqual(domainObject.ProcessType.name, documentFromDB.ProcessType.name);
            Assert.AreEqual(domainObject.ProcessDataSchemaVersion, documentFromDB.ProcessDataSchemaVersion);
        }
        public MatProcessData GetProcessData(string processRef)
        {
            //retrieve data by id
            var filter = Builders <BsonDocument> .Filter.Eq("_id", processRef);

            //we will never expect more than one JSON documents matching an ID so we always choose the first/default result
            var result = matDbContext.getCollection().FindAsync(filter).Result.FirstOrDefault();

            //if document does not exist in the DB, then thrown a corresponsing error.
            if (result == null)
            {
                throw new DocumentNotFound();
            }

            return(ProcessDataFactory.CreateProcessDataObject(result));
        }
Example #9
0
        public void can_create_mat_process_data_object_from_empty_object()
        {
            //arrange
            var matProcessData = new MatProcessData();
            //act
            var processDataFromFactory = ProcessDataFactory.CreateProcessDataObject(BsonDocument.Parse(JsonConvert.SerializeObject(matProcessData)));

            //assert
            Assert.AreEqual(matProcessData.ProcessDataSchemaVersion, processDataFromFactory.ProcessDataSchemaVersion);
            Assert.AreEqual(matProcessData.DateCompleted, processDataFromFactory.DateCompleted);
            Assert.AreEqual(matProcessData.DateCreated, processDataFromFactory.DateCreated);
            Assert.AreEqual(matProcessData.DateLastModified, processDataFromFactory.DateLastModified);
            Assert.AreEqual(matProcessData.Id, processDataFromFactory.Id);
            Assert.AreEqual(matProcessData.PostProcessData, processDataFromFactory.PostProcessData);
            Assert.AreEqual(matProcessData.PreProcessData, processDataFromFactory.PreProcessData);
            Assert.AreEqual(matProcessData.ProcessData, processDataFromFactory.ProcessData);
            Assert.AreEqual(matProcessData.ProcessStage, processDataFromFactory.ProcessStage);
            Assert.AreEqual(matProcessData.ProcessType, processDataFromFactory.ProcessType);
        }
        public MatProcessData UpdateProcessData(UpdateDefinition <BsonDocument> updateDefinition, string id)
        {
            //return updated document
            var options = new FindOneAndUpdateOptions <BsonDocument>();

            options.ReturnDocument = ReturnDocument.After;
            //query by
            var filter = Builders <BsonDocument> .Filter.Eq("_id", id);

            //find and update
            var result = matDbContext.getCollection().FindOneAndUpdate(filter, updateDefinition, options);

            //if empty result, the document to be updated was not found
            if (result == null)
            {
                throw new DocumentNotFound();
            }
            return(ProcessDataFactory.CreateProcessDataObject(result));
        }
        public void can_create_mat_process_data_object_from_populated_object()
        {
            //arrange
            var matProcessData = ProcessDataHelper.CreateProcessDataObject();
            //act
            var processDataFromFactory = ProcessDataFactory.CreateProcessDataObject(BsonDocument.Parse(JsonConvert.SerializeObject(matProcessData)));

            //assert
            Assert.Equal(matProcessData.Id, processDataFromFactory.Id);
            Assert.Equal(matProcessData.ProcessType.value, processDataFromFactory.ProcessType.value);
            Assert.Equal(matProcessData.ProcessType.name, processDataFromFactory.ProcessType.name);
            Assert.Equal(matProcessData.ProcessDataAvailable, processDataFromFactory.ProcessDataAvailable);
            Assert.Equal(matProcessData.ProcessDataSchemaVersion, processDataFromFactory.ProcessDataSchemaVersion);
            Assert.Equal(matProcessData.ProcessStage, processDataFromFactory.ProcessStage);
            Assert.Equal(matProcessData.LinkedProcessId, processDataFromFactory.LinkedProcessId);
            Assert.Equal(matProcessData.PreProcessData, processDataFromFactory.PreProcessData);
            Assert.Equal(matProcessData.ProcessData, processDataFromFactory.ProcessData);
            Assert.Equal(matProcessData.PostProcessData, processDataFromFactory.PostProcessData);
        }
        public void given_the_requestObject_when_executePost_usecase_method_is_called_then_the_gateway_is_called_with_factory_output() // this should be 2 tests really, one to see if factory gets called, and the other to see if gateway is called, but due to using static factory method this becomes impossible to separate.
        {
            //arrange
            PostInitialProcessDocumentRequest requestObject = MatProcessDataHelper.CreatePostInitialProcessDocumentRequestObject();
            MatProcessData domainObject = ProcessDataFactory.CreateProcessDataObject(requestObject);

            mockMatGateway.Setup(g => g.PostInitialProcessDocument(It.IsAny <MatProcessData>())).Returns((MatProcessData dobj) => dobj.Id);
            //act
            processDataUseCase.ExecutePost(requestObject);

            //assert
            mockMatGateway.Verify(g => g.PostInitialProcessDocument(It.Is <MatProcessData>(d =>
                                                                                           d.ProcessType.name == requestObject.processType.name && //checking whether properties that have to be transfered from request object to domain object are present
                                                                                           d.Id == requestObject.processRef &&
                                                                                           d.ProcessType.value == requestObject.processType.value &&
                                                                                           d.ProcessDataSchemaVersion == requestObject.processDataSchemaVersion &&
                                                                                           d.DateCompleted == DateTime.MinValue && //checking whether some of the properties that factory has to generate itself are present.
                                                                                           d.ProcessStage == "Not completed"
                                                                                           )), Times.Once);
            // This checks whether the usecase calls the gateway with the output of the factory method.
        }
        public List <MatProcessData> GetProcessDataByIDs(string[] refs)
        {
            try
            {
                var filter = Builders <BsonDocument> .Filter.In("_id", refs);

                var result = processDbContext.getCollection().FindAsync(filter).Result;

                List <MatProcessData> docs = new List <MatProcessData>();

                foreach (var doc in result.ToList())
                {
                    docs.Add(ProcessDataFactory.CreateProcessDataObject(doc));
                }

                return(docs);
            }
            catch
            {
                throw new MaTProcessApiException("Unable to get home check details from process database");
            }
        }
Example #14
0
        public static List <PassengerProcessedData> ProcessPassengersData(List <Passenger> passengers, Route route)
        {
            var passengerProcessedData = new List <PassengerProcessedData>();

            foreach (var passenger in passengers)
            {
                ProcessDataFactory factory = null;
                switch (passenger.MembershipType)
                {
                case MembershipType.general:
                    factory = new GeneralPassengerFactory(passenger, route);
                    break;

                case MembershipType.airline:
                    factory = new AirlinePassengerFactory(passenger, route);
                    break;

                case MembershipType.loyalty:
                    factory = new LoyaltyPassengerFactory(passenger, route);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                PassengerData passengerData = factory.GetPassengerData();
                if (passengerData != null)
                {
                    passengerProcessedData.Add(new PassengerProcessedData()
                    {
                        Bags             = passengerData.TotalBags,
                        LoyaltyPointUsed = passengerData.LoyaltyPointUsed,
                        ProcessedRevnue  = passengerData.TicketPrice
                    });
                }
            }

            return(passengerProcessedData);
        }
        public void given_the_requestObject_when_executePost_usecase_method_is_called_then_it_wraps_gateway_output_into_postInitialDocumentResponse_object()
        {
            //arrange
            PostInitialProcessDocumentRequest requestObject = MatProcessDataHelper.CreatePostInitialProcessDocumentRequestObject();
            MatProcessData domainObject = ProcessDataFactory.CreateProcessDataObject(requestObject);

            mockMatGateway.Setup(g => g.PostInitialProcessDocument(It.IsAny <MatProcessData>())).Returns((MatProcessData dobj) => dobj.Id);

            //act
            var usecaseResponse = processDataUseCase.ExecutePost(requestObject);

            //assert
            Assert.IsInstanceOf <PostInitialProcessDocumentResponse>(usecaseResponse);

            Assert.IsInstanceOf <PostInitialProcessDocumentRequest>(usecaseResponse.Request);
            Assert.IsInstanceOf <string>(usecaseResponse.ProcessRef);
            Assert.IsInstanceOf <DateTime>(usecaseResponse.GeneratedAt);

            Assert.AreEqual(requestObject.processRef, usecaseResponse.Request.processRef);
            Assert.AreEqual(requestObject.processRef, usecaseResponse.ProcessRef);
            Assert.NotNull(usecaseResponse.GeneratedAt);
            Assert.AreNotEqual(DateTime.MinValue, usecaseResponse.GeneratedAt);
        }
        public void ProcessDataFactory_XML_Pass()
        {
            IProcessData processData = ProcessDataFactory.GetProcessDataType(".xml");

            Assert.Equal(typeof(ProcessXMLData), processData.GetType());
        }
        public void ProcessDataFactory_OtherType_Pass()
        {
            IProcessData processData = ProcessDataFactory.GetProcessDataType(".jpeg");

            Assert.Null(processData);
        }
        public void ProcessDataFactory_JSON_Pass()
        {
            IProcessData processData = ProcessDataFactory.GetProcessDataType(".json");

            Assert.Equal(typeof(ProcessJSONData), processData.GetType());
        }