Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 2bd836e

Browse files
committed
Create EntityBaseTests.cs
1 parent a8adffa commit 2bd836e

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq.Expressions;
4+
using System.Data;
5+
using System.Linq;
6+
using NUnit.Framework;
7+
using ServiceStack.DataAnnotations;
8+
9+
namespace ServiceStack.OrmLite.Tests
10+
{
11+
public class EntityBase
12+
{
13+
public int TenantId { get; set; }
14+
public bool Deleted { get; set; }
15+
}
16+
17+
public class CustomerEntity : EntityBase
18+
{
19+
[AutoIncrement]
20+
public int Id { get; set; }
21+
22+
public string CustomerName { get; set; }
23+
}
24+
25+
public class EmployeeEntity : EntityBase
26+
{
27+
[AutoIncrement]
28+
public int Id { get; set; }
29+
30+
public string EmployeeType { get; set; }
31+
}
32+
33+
class TenantRepo
34+
{
35+
public int tenantId;
36+
public TenantRepo(int tenantId) => this.tenantId = tenantId;
37+
38+
public List<T> All<T>(IDbConnection db)
39+
{
40+
return db.Where<T>(new { TenantId = tenantId });
41+
}
42+
43+
public List<T> AllUntyped<T>(IDbConnection db)
44+
{
45+
return db.Where<T>(nameof(EntityBase.TenantId), tenantId);
46+
}
47+
48+
private SqlExpression<T> CreateQuery<T>(IDbConnection db)
49+
{
50+
return db.From<T>().Where(x => (x as EntityBase).TenantId == tenantId);
51+
}
52+
53+
public List<T> AllTyped<T>(IDbConnection db)
54+
{
55+
return db.Select(CreateQuery<T>(db));
56+
}
57+
58+
public List<T> Where<T>(IDbConnection db, Expression<Func<T, bool>> expr)
59+
{
60+
return db.Select(CreateQuery<T>(db).And(expr));
61+
}
62+
}
63+
64+
abstract class EntityRepoBase<T> where T : EntityBase, new()
65+
{
66+
public int tenantId;
67+
public EntityRepoBase(int tenantId) => this.tenantId = tenantId;
68+
69+
public List<T> All(IDbConnection db) =>
70+
db.Select(db.From<T>().Where(x => x.TenantId == tenantId));
71+
72+
public List<T> Where(IDbConnection db, Expression<Func<T, bool>> expr) =>
73+
db.Select(db.From<T>().Where(x => x.TenantId == tenantId).And(expr));
74+
}
75+
76+
class CustomerTenantRepo : EntityRepoBase<CustomerEntity>
77+
{
78+
public CustomerTenantRepo(int tenantId) : base(tenantId) { }
79+
}
80+
81+
[TestFixture]
82+
public class EntityBaseTests : OrmLiteTestBase
83+
{
84+
public void SeedData(IDbConnection db)
85+
{
86+
OrmLiteUtils.PrintSql();
87+
db.DropAndCreateTable<CustomerEntity>();
88+
db.Insert(new CustomerEntity {TenantId = 1, CustomerName = "Kurt" });
89+
db.Insert(new CustomerEntity {TenantId = 1, CustomerName = "Dave" });
90+
db.Insert(new CustomerEntity {TenantId = 2, CustomerName = "Kurt" });
91+
db.Insert(new CustomerEntity {TenantId = 2, CustomerName = "Dave" });
92+
}
93+
94+
[Test]
95+
public void Can_generically_query_base_class()
96+
{
97+
var repo = new TenantRepo(2);
98+
99+
using (var db = OpenDbConnection())
100+
{
101+
SeedData(db);
102+
103+
var rows = repo.All<CustomerEntity>(db);
104+
Assert.That(rows.Count, Is.EqualTo(2));
105+
Assert.That(rows.All(x => x.TenantId == 2));
106+
107+
rows = repo.AllTyped<CustomerEntity>(db);
108+
Assert.That(rows.Count, Is.EqualTo(2));
109+
Assert.That(rows.All(x => x.TenantId == 2));
110+
111+
rows = repo.AllUntyped<CustomerEntity>(db);
112+
Assert.That(rows.Count, Is.EqualTo(2));
113+
Assert.That(rows.All(x => x.TenantId == 2));
114+
115+
rows = repo.Where<CustomerEntity>(db, x => x.CustomerName == "Kurt");
116+
Assert.That(rows.Count, Is.EqualTo(1));
117+
Assert.That(rows[0].TenantId, Is.EqualTo(2));
118+
}
119+
}
120+
121+
[Test]
122+
public void Can_generically_query_base_class_with_constrained_repo()
123+
{
124+
var repo = new CustomerTenantRepo(2);
125+
126+
using (var db = OpenDbConnection())
127+
{
128+
SeedData(db);
129+
130+
var rows = repo.All(db);
131+
Assert.That(rows.Count, Is.EqualTo(2));
132+
Assert.That(rows.All(x => x.TenantId == 2));
133+
134+
rows = repo.Where(db, x => x.CustomerName == "Kurt");
135+
Assert.That(rows.Count, Is.EqualTo(1));
136+
Assert.That(rows[0].TenantId, Is.EqualTo(2));
137+
}
138+
}
139+
}
140+
}

0 commit comments

Comments
 (0)