// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNet.Identity.Test; using Microsoft.Data.Entity; using Microsoft.Data.Entity.Metadata; using Xunit; namespace Microsoft.AspNet.Identity.EntityFramework.Test { [TestCaseOrderer("Microsoft.AspNet.Identity.Test.PriorityOrderer", "Microsoft.AspNet.Identity.EntityFramework.Test")] public class CustomPocoTest { private readonly string ConnectionString = @"Server=(localdb)\mssqllocaldb;Database=CustomUserContextTest" + DateTime.Now.Month + "-" + DateTime.Now.Day + "-" + DateTime.Now.Year + ";Trusted_Connection=True;"; public class User where TKey : IEquatable { public TKey Id { get; set; } public string UserName { get; set; } } public class CustomDbContext : DbContext where TKey : IEquatable { public DbSet> Users { get; set; } } public CustomDbContext GetContext() where TKey : IEquatable { return DbUtil.Create>(ConnectionString); } public CustomDbContext CreateContext(bool delete = false) where TKey : IEquatable { var db = GetContext(); if (delete) { db.Database.EnsureDeleted(); } db.Database.EnsureCreated(); return db; } [TestPriority(-1000)] [Fact] public void DropDatabaseStart() { DropDb(); } [TestPriority(10000)] [Fact] public void DropDatabaseDone() { DropDb(); } public void DropDb() { var db = GetContext(); db.Database.EnsureDeleted(); } [Fact] public async Task CanUpdateNameGuid() { using (var db = CreateContext(true)) { var oldName = Guid.NewGuid().ToString(); var user = new User { UserName = oldName, Id = Guid.NewGuid() }; db.Users.Add(user); await db.SaveChangesAsync(); var newName = Guid.NewGuid().ToString(); user.UserName = newName; await db.SaveChangesAsync(); Assert.Null(db.Users.SingleOrDefault(u => u.UserName == oldName)); Assert.Equal(user, db.Users.Single(u => u.UserName == newName)); } } [Fact] public async Task CanUpdateNameString() { using (var db = CreateContext(true)) { var oldName = Guid.NewGuid().ToString(); var user = new User { UserName = oldName, Id = Guid.NewGuid().ToString() }; db.Users.Add(user); await db.SaveChangesAsync(); var newName = Guid.NewGuid().ToString(); user.UserName = newName; await db.SaveChangesAsync(); Assert.Null(db.Users.SingleOrDefault(u => u.UserName == oldName)); Assert.Equal(user, db.Users.Single(u => u.UserName == newName)); } } [Fact] public async Task CanCreateUserInt() { using (var db = CreateContext(true)) { var user = new User(); db.Users.Add(user); await db.SaveChangesAsync(); user.UserName = "Boo"; await db.SaveChangesAsync(); var fetch = db.Users.First(u => u.UserName == "Boo"); Assert.Equal(user, fetch); } } [Fact] public async Task CanCreateUserIntViaSet() { using (var db = CreateContext(true)) { var user = new User(); var users = db.Set>(); users.Add(user); await db.SaveChangesAsync(); user.UserName = "Boo"; await db.SaveChangesAsync(); var fetch = users.First(u => u.UserName == "Boo"); Assert.Equal(user, fetch); } } [Fact] public async Task CanUpdateNameInt() { using (var db = CreateContext(true)) { var oldName = Guid.NewGuid().ToString(); var user = new User { UserName = oldName}; db.Users.Add(user); await db.SaveChangesAsync(); var newName = Guid.NewGuid().ToString(); user.UserName = newName; await db.SaveChangesAsync(); Assert.Null(db.Users.SingleOrDefault(u => u.UserName == oldName)); Assert.Equal(user, db.Users.Single(u => u.UserName == newName)); } } [Fact] public async Task CanUpdateNameIntWithSet() { using (var db = CreateContext(true)) { var oldName = Guid.NewGuid().ToString(); var user = new User { UserName = oldName}; db.Set>().Add(user); await db.SaveChangesAsync(); var newName = Guid.NewGuid().ToString(); user.UserName = newName; await db.SaveChangesAsync(); Assert.Null(db.Set>().SingleOrDefault(u => u.UserName == oldName)); Assert.Equal(user, db.Set>().Single(u => u.UserName == newName)); } } } }