-
Notifications
You must be signed in to change notification settings - Fork 0
/
tests.cs
126 lines (115 loc) · 4.25 KB
/
tests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using Xunit;
public class tests{
/***
the plan is implement a program which
- allow us to have an organizational tree
- having the name of 2 employees, find the first common boss in their hierarchical path
For instance:
A (has no boss)
B | C | D
E F G | H
I | J |
boss(A)==null
boss(B)==A, boss(C)==A, boss(D)==A
boss(E)==B, boss(F)==B, boss(B)==A, boss(H)==C
boss(I)==F, boss(J)==G
so, first common boss(FCB) function should bring this kind of results
FirstCommonBoss(B,C)=A
FirstCommonBoss(C,D)=A
FirstCommonBoss(E,F)=B
FirstCommonBoss(I,J)=B
FirstCommonBoss(I,D)=A
*/
/**
firstable, i'll need to populate this organizational tree
*/
[Fact]
public void InsertFirstPerson()
{
var organization=new Organization();
organization.AddEmployee("A", null);
}
[Fact]
public void InsertFirstPersonUnderMainBoss()
{
var organization=new Organization();
organization.AddEmployee("A", null);
organization.AddEmployee("B", "A");
}
[Fact]
public void InsertFirstPersonUnderANonMainBoss()
{
var organization=new Organization();
organization.AddEmployee("A", null);
organization.AddEmployee("B", "A");
organization.AddEmployee("E", "B");
}
[Fact]
public void CreateComplexOrganizationalTree()
{
var organization=GetPopulatedOrganization();
Assert.Equal("K",organization.FindEmployee("L").GetBossName());
}
private Organization GetPopulatedOrganization()
{
var organization=new Organization();
organization.AddEmployee("A", null);
organization.AddEmployee("B", "A");
organization.AddEmployee("C", "A");
organization.AddEmployee("D", "A");
organization.AddEmployee("E", "B");
organization.AddEmployee("F", "B");
organization.AddEmployee("G", "B");
organization.AddEmployee("H", "C");
organization.AddEmployee("I", "H");
organization.AddEmployee("J", "I");
organization.AddEmployee("K", "I");
organization.AddEmployee("L", "K");
return organization;
}
[Fact]
public void FindEmployeeBoss()
{
var organization= GetPopulatedOrganization();
var employeeL=organization.FindEmployee("L");
var directLBoss=organization.FindEmployeeInBosses("K", employeeL );
Assert.Equal("K",directLBoss.GetEmployeeName());
}
[Fact]
public void FindEmployeeInUpperHierarchy()
{
var organization= GetPopulatedOrganization();
var employeeL=organization.FindEmployee("L");
var higherLBoss=organization.FindEmployeeInBosses("H", employeeL );
Assert.Equal("H", higherLBoss.GetEmployeeName());
}
[Fact]
public void FindEmployeeInANonRelatedUpperHierarchy()
{
var organization= GetPopulatedOrganization();
var employeeL=organization.FindEmployee("L");
var higherNonRelatedLBoss=organization.FindEmployeeInBosses("B", employeeL );
Assert.Equal(null, higherNonRelatedLBoss);
}
[Fact]
public void FindFirstCommonBossBetweenTwoEmployeesDirectlyRelated()
{
var organization= GetPopulatedOrganization();
var employeeL=organization.FindEmployee("L");
var employeeK=organization.FindEmployee("K");
var firstCommonBoss=organization.FindFirstCommonBoss(employeeK, employeeL);
Assert.Equal("K",firstCommonBoss.GetEmployeeName());
}
[Fact]
public void FindFirstCommonBossBetweenTwoEmployeesNonDirectlyRelated()
{
var organization= GetPopulatedOrganization();
var employeeL=organization.FindEmployee("L");
var employeeJ=organization.FindEmployee("J");
var employeeG=organization.FindEmployee("G");
var firstCommonBoss=organization.FindFirstCommonBoss(employeeJ, employeeL);
Assert.Equal( "I",firstCommonBoss.GetEmployeeName());
firstCommonBoss=organization.FindFirstCommonBoss(employeeJ, employeeG);
Assert.Equal("A",firstCommonBoss.GetEmployeeName());
}
}