public async Task UserService_GetUsersAsync_Returns_Correct_Users() { //assemble var contextOptions = new DbContextOptionsBuilder <InterviewContext>() .UseInMemoryDatabase("correct-users-returned") .Options; var user = new User { Id = Guid.NewGuid(), CreatedOn = DateTime.Now, Email = "*****@*****.**", FirstName = "tester", LastName = "test" }; using var context = new InterviewContext(contextOptions); context.Users.Add(user); context.SaveChanges(); var service = new UserService(context); //act var users = await service.GetUsersAsync(); //assert Assert.IsNotNull(users.FirstOrDefault(u => u.Id == user.Id)); }
public static void Seed(this InterviewContext context) { AddUser(new User { Id = new Guid("844e71eb-684b-466e-af4d-1a7b86d4f5b6"), FirstName = "Dick", LastName = "Richard", CreatedOn = new DateTime(1968, 1, 1), Email = "*****@*****.**" }, context); AddUser(new User { Id = new Guid("59efd189-8306-41d0-a3fc-381d6fb0adfe"), FirstName = "Rocky", LastName = "Balboa", CreatedOn = new DateTime(2016, 3, 1), Email = "*****@*****.**" }, context); AddUser(new User { Id = new Guid("5293847f-24b7-47f9-8ca0-596dbe1777d6"), FirstName = "Johnny", LastName = "Cash", CreatedOn = new DateTime(1989, 1, 1), Email = "*****@*****.**" }, context); AddUser(new User { Id = new Guid("682131e0-bfcd-4d7f-99a8-9408a64ce825"), FirstName = "Georges", LastName = "Washington", CreatedOn = new DateTime(1796, 1, 1), Email = "*****@*****.**" }, context); AddUser(new User { Id = new Guid("94c74f99-427a-43d1-a822-cf0fe25d6834"), FirstName = "Arnold", LastName = "Schwarzenegger", CreatedOn = new DateTime(1796, 1, 1), Email = "*****@*****.**" }, context); AddUser(new User { Id = new Guid("10caa521-18ef-425a-ba3a-d133651f6c3b"), FirstName = "Donald", LastName = "Trump", CreatedOn = new DateTime(2016, 2, 1), Email = "*****@*****.**" }, context); foreach (var index in Enumerable.Range(1, 100)) { AddUser(new User { Id = Guid.NewGuid(), FirstName = $"Test-{index}", LastName = "Tester", CreatedOn = DateTime.Now, Email = $"test{index}" }, context); } context.SaveChanges(); }
public async Task UserService_GetUsersAsync_Returns_Correct_Number_Of_Users() { //assemble var contextOptions = new DbContextOptionsBuilder <InterviewContext>() .UseInMemoryDatabase("correct-number-of-users") .Options; var user = new User { Id = Guid.NewGuid(), CreatedOn = DateTime.Now, Email = "*****@*****.**", FirstName = "tester", LastName = "test" }; using var context = new InterviewContext(contextOptions); context.Users.Add(user); context.SaveChanges(); var service = new UserService(context); //act var users = await service.GetUsersAsync(); //assert Assert.AreEqual(users.Count(), 1); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, InterviewContext interviewContext) { if (env.IsDevelopment()) { interviewContext.Seed(); app.UseDeveloperExceptionPage(); } else { //app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); }
private static void AddUser(User user, InterviewContext context) { var dbUser = context.Users.FirstOrDefault(u => u.FirstName == user.FirstName && u.LastName == user.LastName); if (dbUser == null) { context.Users.Add(user); } }
public async Task <IActionResult> ReportAdsChange() { InterviewContext context = new InterviewContext(); var item = context.Products.ToList(); await _mailer.SendEmailAsync("*****@*****.**", "Change", "Change Ads" + priceChange); return(NoContent()); }
public async Task UserService_AddUser_Returns_Correct_Id() { //assemble var contextOptions = new DbContextOptionsBuilder <InterviewContext>() .UseInMemoryDatabase("correct-id-returned") .Options; var user = new User { Id = Guid.NewGuid(), CreatedOn = DateTime.Now, Email = "*****@*****.**", FirstName = "tester", LastName = "test" }; using var context = new InterviewContext(contextOptions); var service = new UserService(context); //act var id = await service.AddUser(user); //assert Assert.IsTrue(user.Id == id); }
public async Task UserService_AddUser_Adds_To_Context() { //assemble var contextOptions = new DbContextOptionsBuilder <InterviewContext>() .UseInMemoryDatabase("correct-users-returned") .Options; var user = new User { Id = Guid.NewGuid(), CreatedOn = DateTime.Now, Email = "*****@*****.**", FirstName = "tester", LastName = "test" }; using var context = new InterviewContext(contextOptions); var service = new UserService(context); //act await service.AddUser(user); //assert Assert.IsNotNull(context.Users.FirstOrDefault()); }
public ProductsController(InterviewContext context) { _context = context; }
public DevLossService(InterviewContext context) { _context = context; }
public UserService(InterviewContext context) { _context = context; }
public async void ProductScrape() { string price = "7.250 TL"; string price1 = "100 TL"; string price2 = "350 TL"; string Url = "https://www.arabam.com/ilan/rent-a-car-dan-kiralik-skoda-superb/skoda-superb-2018-dizel-otomatik-avansis-oto-kiralama/15772963"; string Url1 = "https://www.arabam.com/ilan/rent-a-car-dan-kiralik-citroen-c-elysee/dedeoglu-dan-kiralik-dizel-araclar/13058389"; string Url2 = "https://www.arabam.com/ilan/rent-a-car-dan-kiralik-bmw-3-serisi/ador-motors-bmw-320-m-plus-otomatik-gunluk-350-tl/14951347"; string XPath = "//*[@id='wrapper']/div[5]/div[3]/div/div[1]/p"; string XPath1 = "//*[@id='js-hook-for-observer-detail']/div[2]/ul/li[1]/span[2]"; string XPath2 = "//*[@id='js-hook-for-observer-detail']/div[2]/div[1]/div/span"; url = new Uri(Url); url1 = new Uri(Url1); url2 = new Uri(Url2); WebClient client = new WebClient(); client.Encoding = Encoding.UTF8; html = client.DownloadString(url); html1 = client.DownloadString(url1); html2 = client.DownloadString(url2); HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); document.LoadHtml(html); var firstAdsName = document.DocumentNode.SelectSingleNode(XPath).InnerText; var firstAdsNumber = document.DocumentNode.SelectSingleNode(XPath1).InnerText; var firstAdsPrice = document.DocumentNode.SelectSingleNode(XPath2).InnerText; document.LoadHtml(html1); var secondAdsName = document.DocumentNode.SelectSingleNode(XPath).InnerText; var secondAdsNumber = document.DocumentNode.SelectSingleNode(XPath1).InnerText; var secondAdsPrice = document.DocumentNode.SelectSingleNode(XPath2).InnerText; document.LoadHtml(html2); var thirdAdsName = document.DocumentNode.SelectSingleNode(XPath).InnerText; var thirdAdsNumber = document.DocumentNode.SelectSingleNode(XPath1).InnerText; var thirdAdsPrice = document.DocumentNode.SelectSingleNode(XPath2).InnerText; Product adsProduct = new Product { Name = firstAdsName, AdsNumber = Convert.ToInt32(firstAdsNumber), Price = firstAdsPrice, Date = DateTime.Now }; Product adsProduct1 = new Product { Name = secondAdsName, AdsNumber = Convert.ToInt32(secondAdsNumber), Price = secondAdsPrice, Date = DateTime.Now }; Product adsProduct2 = new Product { Name = thirdAdsName, AdsNumber = Convert.ToInt32(thirdAdsNumber), Price = thirdAdsPrice, Date = DateTime.Now }; InterviewContext context = new InterviewContext(); if (adsProduct.Price != price) { priceChange = price + "" + adsProduct.Price; await _mailer.SendEmailAsync("*****@*****.**", "Change", "ChangeAdsProduct" + priceChange); } if (adsProduct1.Price != price1) { priceChange = price + "" + adsProduct1.Price; await _mailer.SendEmailAsync("*****@*****.**", "Change", "ChangeAdsProduct" + priceChange); } if (adsProduct2.Price != price2) { priceChange = price + "" + adsProduct2.Price; await _mailer.SendEmailAsync("*****@*****.**", "Change", "ChangeAdsProduct" + priceChange); } await context.Products.AddAsync(adsProduct); await context.Products.AddAsync(adsProduct1); await context.Products.AddAsync(adsProduct2); await context.SaveChangesAsync(); }