public void Execute_WhenAPerfectCSVListIsGiven_ShouldParseItAndWriteToDataBase()
        {
            var listId = UiActions.ExecuteCommand<CreateListCommand, string>(x => x.Name = "AList");

            var filename = CsvTestingExtentions.GenerateFileName("sample");
            Fixture.CreateMany<ContactsListCsvRow>(10).ToCsvFile(filename);

            var task = new ImportContactsFromCsvTask
                        {
                            ListId = listId,
                            File = filename
                        };

            UiActions.ExecuteTask(task);

            Store.WaitForEntitiesToExist<Contact>(10);

            var result = Store.Query<Contact>();

            result.Should().HaveCount(10);
        }
        public void Execute_WhenImportingContacts_ShouldApplyIntervalLogicToTheBeforeSaving()
        {
            var listId = UiActions.ExecuteCommand<CreateListCommand, string>(x => x.Name = "AList");

            var filename = CsvTestingExtentions.GenerateFileName("sample");
            var rows = CreateRowWithDomain("gmail.com", 20)
                .Union(CreateRowWithDomain("hotmail.com", 70))
                .Union(CreateRowWithDomain("aol.com", 50))
                .Union(CreateRowWithDomain("random.com", 200))
                .ToList();

            rows.ToCsvFile(filename);

            AddIntervalRules("gmail.com","gmail",20);
            AddIntervalRules("hotmail.com","hotmail",20);
            AddIntervalRules("aol.com","aol",20);

            var task = new ImportContactsFromCsvTask
                        {
                            ListId = listId,
                            File = filename
                        };

            UiActions.ExecuteTask(task);

            Tasks.WaitForTaskToComplete(task.Id);

            var result = Store.Query<Contact>();

            result.Should().HaveCount(20 + 70 + 50 + 200);

            result.Where(x => x.DomainGroup == "gmail").Should().HaveCount(20);
            result.Where(x => x.DomainGroup == "hotmail").Should().HaveCount(70);
            result.Where(x => x.DomainGroup == "aol").Should().HaveCount(50);
            result.Where(x => x.DomainGroup == "$default$").Should().HaveCount(200);
        }
Example #3
0
        public ListsModule(Framework framework, IDocumentStore documentStore, CreateListCommand createListCommand)
            : base("/lists")
        {
            _createListCommand = createListCommand;
            _documentStore = documentStore;
            _framework = framework;

            Put["/upload-list"] = api =>
                                      {
                                          var model = this.Bind<ServiceEndpoints.Lists.UploadContacts>();
                                          var file = Request.Files.FirstOrDefault();
                                          if (file == null)
                                              throw new ArgumentNullException("no files was provided");

                                          var path = Guid.NewGuid().ToString();
                                          using (var diskFile = File.OpenWrite(path))
                                          {
                                              file.Value.CopyTo(diskFile);
                                          }

                                          var importContactsFromCsvTask = new ImportContactsFromCsvTask
                                                                              {
                                                                                  File = path,
                                                                                  ListId = model.ListId
                                                                              };
                                          _framework.ExecuteTask(importContactsFromCsvTask);

                                          return importContactsFromCsvTask.Id;
                                      };

            Get["/"] = api =>
                              {
                                  using (var session = _documentStore.OpenSession())
                                  {
                                      return Response.AsJson(session.Query<ListDescriptor>().ToList());
                                  }
                              };

            Get["/stats"] = api =>
                              {
                                  using (var session = _documentStore.OpenSession())
                                  {

                                      var lists = session.Query<ListDescriptor>().ToList();
                                      var listStats = lists.Select(listDescriptor => new
                                                                            {
                                                                                TotalContacts = session.Query<Contact>().Count(x => x.MemberOf.Any(p => p == listDescriptor.Id)),
                                                                                listDescriptor.Id,
                                                                                listDescriptor.Name
                                                                            }).ToList();

                                      return Response.AsJson(listStats);
                                  }
                              };

            Post["/"] = api =>
                                  {
                                      var model = this.Bind<ServiceEndpoints.Lists.CreateList>();
                                      _createListCommand.Name = model.Name;
                                      var listId = _framework.ExecuteCommand(_createListCommand);

                                      return Response.AsJson(new ApiStringResult { Result = listId });
                                  };
        }