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); }
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 }); }; }