Skip to content

Commit 0df1c5c

Browse files
committed
Testing the Services
1 parent 0d09c32 commit 0df1c5c

File tree

5 files changed

+110
-92
lines changed

5 files changed

+110
-92
lines changed

Core/Models/Service.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ private void _apply(Change change)
114114
break;
115115
case ChangeType.Add:
116116
Account accountToAdd = Database.SerializationCenter.Deserialize<Account>(change.Value);
117+
accountToAdd.Service = this;
117118
Accounts.Add(accountToAdd);
118119
break;
119120
case ChangeType.Delete:

Core/Models/User.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ private void _apply(Change change)
118118
break;
119119
case ChangeType.Add:
120120
Service serviceToAdd = Database.SerializationCenter.Deserialize<Service>(change.Value);
121+
serviceToAdd.User = this;
121122
Services.Add(serviceToAdd);
122123
break;
123124
case ChangeType.Delete:

UnitTests/Models/ServiceUnitTests.cs

Lines changed: 104 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -9,94 +9,93 @@ public sealed class ServiceUnitTests
99
{
1010
[TestMethod]
1111
/*
12-
* User.AddService Adds the new service,
13-
* Then updating the service,
14-
* Then Database.Save will save the update in the database file and delete the autosave file,
15-
* Then GetUser loads correctly the updated database file.
12+
* User.AddService adds the new service,
13+
* Then updating the service and saving will save the update in the database file and delete the autosave file,
14+
* Then Database.Open loads correctly the updated database file with the updated service.
1615
*/
17-
public void Case01_ServiceAdd()
16+
public void Case01_AddServiceUpdateSaved()
1817
{
1918
// Given
2019
UnitTestsHelper.ClearTestEnvironment();
2120
string[] passkeys = UnitTestsHelper.GetRandomPasskeys();
2221
IDatabase databaseCreated = UnitTestsHelper.CreateTestDatabase(passkeys);
22+
string serviceName = "Service_" + UnitTestsHelper.GetUsername();
23+
string url = UnitTestsHelper.GetRandomString();
24+
string notes = UnitTestsHelper.GetRandomString();
25+
26+
// When
27+
if (databaseCreated.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
28+
IService service = databaseCreated.User.AddService(serviceName);
29+
30+
// Then
31+
databaseCreated.User.Services.Count().Should().Be(1);
32+
33+
// When
34+
service.Url = url;
35+
service.Notes = notes;
36+
databaseCreated.Save();
2337
databaseCreated.Close();
24-
string oldDatabaseContent = File.ReadAllText(UnitTestsHelper.ComputeDatabaseFilePath());
38+
2539
IDatabase databaseLoaded = UnitTestsHelper.OpenTestDatabase(passkeys);
40+
if (databaseLoaded.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
2641

27-
string newUsername = UnitTestsHelper.GetRandomString();
28-
string[] newPasskeys = UnitTestsHelper.GetRandomPasskeys();
29-
int logoutTimeout = UnitTestsHelper.GetRandomInt(1, 60);
30-
int cleaningClipboardTimeout = UnitTestsHelper.GetRandomInt(1, 60);
42+
// Then
43+
databaseLoaded.User.Services.Count().Should().Be(1);
3144

3245
// When
33-
if (databaseLoaded.User == null) throw new NullReferenceException(nameof(databaseLoaded.User));
34-
35-
databaseLoaded.User.Username = newUsername;
36-
databaseLoaded.User.Passkeys = newPasskeys;
37-
databaseLoaded.User.LogoutTimeout = logoutTimeout;
38-
databaseLoaded.User.CleaningClipboardTimeout = cleaningClipboardTimeout;
39-
databaseLoaded.Close();
46+
IService serviceLoaded = databaseLoaded.User.Services.First();
4047

4148
// Then
42-
_ = File.Exists(UnitTestsHelper.ComputeAutoSaveFilePath()).Should().BeTrue();
43-
_ = File.ReadAllText(UnitTestsHelper.ComputeDatabaseFilePath()).Should().Be(oldDatabaseContent);
49+
serviceLoaded.ServiceName.Should().Be(serviceName);
50+
serviceLoaded.Url.Should().Be(url);
51+
serviceLoaded.Notes.Should().Be(notes);
4452

4553
// Finaly
54+
databaseLoaded.Close();
4655
UnitTestsHelper.ClearTestEnvironment();
4756
}
4857

4958
[TestMethod]
5059
/*
51-
* Updating User creates an autosave file,
52-
* Then Database.Save will save the update in the database file and delete the autosave file,
53-
* Then GetUser loads correctly the updated database file.
60+
* User.AddService adds the new service,
61+
* Then updating the service without saving will create the autosave file,
62+
* Then Database.Open with AutoSaveMergeBehavior.MergeThenRemoveAutoSaveFile loads correctly the updated database file with the updated service.
5463
*/
55-
public void Case02_UserUpdateThenSaved()
64+
public void Case02_AddServiceUpdateAutoSave()
5665
{
5766
// Given
5867
UnitTestsHelper.ClearTestEnvironment();
59-
string databaseFile = UnitTestsHelper.ComputeDatabaseFilePath();
60-
string autoSaveFile = UnitTestsHelper.ComputeAutoSaveFilePath();
61-
string logFile = UnitTestsHelper.ComputeLogFilePath();
62-
IDatabase databaseCreated = UnitTestsHelper.CreateTestDatabase();
63-
string newUsername = UnitTestsHelper.GetRandomString();
64-
string[] newPasskeys = UnitTestsHelper.GetRandomPasskeys();
65-
int logoutTimeout = UnitTestsHelper.GetRandomInt(1, 60);
66-
int cleaningClipboardTimeout = UnitTestsHelper.GetRandomInt(1, 60);
68+
string[] passkeys = UnitTestsHelper.GetRandomPasskeys();
69+
IDatabase databaseCreated = UnitTestsHelper.CreateTestDatabase(passkeys);
70+
string serviceName = "Service_" + UnitTestsHelper.GetUsername();
71+
string url = UnitTestsHelper.GetRandomString();
72+
string notes = UnitTestsHelper.GetRandomString();
6773

6874
// When
6975
if (databaseCreated.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
70-
71-
databaseCreated.User.Username = newUsername;
72-
databaseCreated.User.Passkeys = newPasskeys;
73-
databaseCreated.User.LogoutTimeout = logoutTimeout;
74-
databaseCreated.User.CleaningClipboardTimeout = cleaningClipboardTimeout;
76+
IService service = databaseCreated.User.AddService(serviceName);
7577

7678
// Then
77-
_ = File.Exists(autoSaveFile).Should().BeTrue();
79+
databaseCreated.User.Services.Count().Should().Be(1);
7880

7981
// When
80-
databaseCreated.Save();
82+
service.Url = url;
83+
service.Notes = notes;
8184
databaseCreated.Close();
8285

86+
IDatabase databaseLoaded = UnitTestsHelper.OpenTestDatabase(passkeys, AutoSaveMergeBehavior.MergeThenRemoveAutoSaveFile);
87+
if (databaseLoaded.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
88+
8389
// Then
84-
_ = File.Exists(autoSaveFile).Should().BeFalse();
90+
databaseLoaded.User.Services.Count().Should().Be(1);
8591

8692
// When
87-
IDatabase databaseLoaded = IDatabase.Open(UnitTestsHelper.CryptographicCenter, UnitTestsHelper.SerializationCenter, databaseFile, autoSaveFile, logFile, newUsername);
88-
foreach (string passkey in newPasskeys)
89-
{
90-
_ = databaseLoaded.Login(passkey);
91-
}
93+
IService serviceLoaded = databaseLoaded.User.Services.First();
9294

9395
// Then
94-
_ = databaseLoaded.User.Should().NotBeNull();
95-
_ = (databaseLoaded.User?.Username.Should().Be(newUsername));
96-
_ = (databaseLoaded.User?.LogoutTimeout.Should().Be(logoutTimeout));
97-
_ = (databaseLoaded.User?.CleaningClipboardTimeout.Should().Be(cleaningClipboardTimeout));
98-
99-
_ = File.Exists(autoSaveFile).Should().BeFalse();
96+
serviceLoaded.ServiceName.Should().Be(serviceName);
97+
serviceLoaded.Url.Should().Be(url);
98+
serviceLoaded.Notes.Should().Be(notes);
10099

101100
// Finaly
102101
databaseLoaded.Close();
@@ -105,62 +104,79 @@ public void Case02_UserUpdateThenSaved()
105104

106105
[TestMethod]
107106
/*
108-
* Updating User creates an autosave file,
109-
* Then GetUser loads the database file without the updated data,
110-
* Then HandleAutoSave updates the database object and the database file,
111-
* Then GetUser loads correctly the updated database file.
107+
* User.DeleteService deletes the service,
108+
* Then Database.Open loads correctly the updated database file with the updated service.
112109
*/
113-
public void Case03_UserUpdateButNotSaved()
110+
public void Case03_DeleteServiceUpdateSaved()
114111
{
115112
// Given
116113
UnitTestsHelper.ClearTestEnvironment();
117-
string oldUsername = UnitTestsHelper.GetUsername();
118-
string[] oldPasskeys = UnitTestsHelper.GetRandomPasskeys();
119-
string databaseFile = UnitTestsHelper.ComputeDatabaseFilePath();
120-
string autoSaveFile = UnitTestsHelper.ComputeAutoSaveFilePath();
121-
string logFile = UnitTestsHelper.ComputeLogFilePath();
122-
IDatabase databaseCreated = UnitTestsHelper.CreateTestDatabase(oldPasskeys);
123-
string newUsername = UnitTestsHelper.GetRandomString();
124-
string[] newPasskeys = UnitTestsHelper.GetRandomPasskeys();
125-
int logoutTimeout = UnitTestsHelper.GetRandomInt(1, 60);
126-
int cleaningClipboardTimeout = UnitTestsHelper.GetRandomInt(1, 60);
114+
string[] passkeys = UnitTestsHelper.GetRandomPasskeys();
115+
IDatabase databaseCreated = UnitTestsHelper.CreateTestDatabase(passkeys);
116+
string serviceName = "Service_" + UnitTestsHelper.GetUsername();
117+
if (databaseCreated.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
118+
databaseCreated.User.AddService(serviceName);
119+
databaseCreated.Save();
120+
databaseCreated.Close();
121+
122+
IDatabase databaseLoaded = UnitTestsHelper.OpenTestDatabase(passkeys);
123+
if (databaseLoaded.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
124+
IService serviceLoaded = databaseLoaded.User.Services.First();
127125

128126
// When
129-
if (databaseCreated.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
127+
databaseLoaded.User.DeleteService(serviceLoaded);
130128

131-
databaseCreated.User.Username = newUsername;
132-
databaseCreated.User.Passkeys = newPasskeys;
133-
databaseCreated.User.LogoutTimeout = logoutTimeout;
134-
databaseCreated.User.CleaningClipboardTimeout = cleaningClipboardTimeout;
135-
databaseCreated.Close();
129+
// Then
130+
databaseLoaded.User.Services.Count().Should().Be(0);
131+
132+
// When
133+
databaseLoaded.Save();
134+
databaseLoaded.Close();
135+
databaseLoaded = UnitTestsHelper.OpenTestDatabase(passkeys);
136+
if (databaseLoaded.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
136137

137138
// Then
138-
_ = File.Exists(autoSaveFile).Should().BeTrue();
139+
databaseLoaded.User.Services.Count().Should().Be(0);
140+
141+
// Finaly
142+
databaseLoaded.Close();
143+
UnitTestsHelper.ClearTestEnvironment();
144+
}
145+
146+
[TestMethod]
147+
/*
148+
* User.DeleteService adeletes the service,
149+
* Then Database.Open with AutoSaveMergeBehavior.MergeThenRemoveAutoSaveFile loads correctly the updated database file with the updated service.
150+
*/
151+
public void Case04_DeleteServiceUpdateAutoSave()
152+
{
153+
// Given
154+
UnitTestsHelper.ClearTestEnvironment();
155+
string[] passkeys = UnitTestsHelper.GetRandomPasskeys();
156+
IDatabase databaseCreated = UnitTestsHelper.CreateTestDatabase(passkeys);
157+
string serviceName = "Service_" + UnitTestsHelper.GetUsername();
158+
if (databaseCreated.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
159+
databaseCreated.User.AddService(serviceName);
160+
databaseCreated.Close();
161+
162+
IDatabase databaseLoaded = UnitTestsHelper.OpenTestDatabase(passkeys, AutoSaveMergeBehavior.MergeThenRemoveAutoSaveFile);
163+
if (databaseLoaded.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
164+
IService serviceLoaded = databaseLoaded.User.Services.First();
139165

140166
// When
141-
IDatabase databaseLoaded = UnitTestsHelper.OpenTestDatabase(oldPasskeys, AutoSaveMergeBehavior.MergeThenRemoveAutoSaveFile);
167+
databaseLoaded.User.DeleteService(serviceLoaded);
142168

143169
// Then
144-
_ = File.Exists(autoSaveFile).Should().BeFalse();
145-
_ = (databaseLoaded.User?.Username.Should().Be(newUsername));
146-
_ = (databaseLoaded.User?.Passkeys.Should().BeEquivalentTo(newPasskeys));
147-
_ = (databaseLoaded.User?.LogoutTimeout.Should().Be(logoutTimeout));
148-
_ = (databaseLoaded.User?.CleaningClipboardTimeout.Should().Be(cleaningClipboardTimeout));
170+
databaseLoaded.User.Services.Count().Should().Be(0);
149171

150172
// When
173+
databaseLoaded.Save();
151174
databaseLoaded.Close();
152-
databaseLoaded = IDatabase.Open(UnitTestsHelper.CryptographicCenter, UnitTestsHelper.SerializationCenter, databaseFile, autoSaveFile, logFile, newUsername);
153-
foreach (string passkey in newPasskeys)
154-
{
155-
_ = databaseLoaded.Login(passkey);
156-
}
175+
databaseLoaded = UnitTestsHelper.OpenTestDatabase(passkeys, AutoSaveMergeBehavior.MergeThenRemoveAutoSaveFile);
176+
if (databaseLoaded.User == null) throw new NullReferenceException(nameof(databaseCreated.User));
157177

158178
// Then
159-
_ = File.Exists(autoSaveFile).Should().BeFalse();
160-
_ = (databaseLoaded.User?.Username.Should().Be(newUsername));
161-
_ = (databaseLoaded.User?.Passkeys.Should().BeEquivalentTo(newPasskeys));
162-
_ = (databaseLoaded.User?.LogoutTimeout.Should().Be(logoutTimeout));
163-
_ = (databaseLoaded.User?.CleaningClipboardTimeout.Should().Be(cleaningClipboardTimeout));
179+
databaseLoaded.User.Services.Count().Should().Be(0);
164180

165181
// Finaly
166182
databaseLoaded.Close();

UnitTests/Models/UserUnitTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void Case01_UserUpdateWithoutSaving()
4747
/*
4848
* Updating User creates an autosave file,
4949
* Then Database.Save will save the update in the database file and delete the autosave file,
50-
* Then GetUser loads correctly the updated database file.
50+
* Then Database.Open loads correctly the updated database file.
5151
*/
5252
public void Case02_UserUpdateThenSaved()
5353
{
@@ -103,9 +103,9 @@ public void Case02_UserUpdateThenSaved()
103103
[TestMethod]
104104
/*
105105
* Updating User creates an autosave file,
106-
* Then GetUser loads the database file without the updated data,
106+
* Then Database.Open loads the database file without the updated data,
107107
* Then HandleAutoSave updates the database object and the database file,
108-
* Then GetUser loads correctly the updated database file.
108+
* Then Database.Open loads correctly the updated database file.
109109
*/
110110
public void Case03_UserUpdateButNotSaved()
111111
{

UnitTests/UnitTestsHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public static IDatabase CreateTestDatabase(string[]? passkeys = null, [CallerMem
3737
return database;
3838
}
3939

40-
public static IDatabase OpenTestDatabase(string[] passkeys, AutoSaveMergeBehavior mergeAutoSave = AutoSaveMergeBehavior.MergeThenRemoveAutoSaveFile, [CallerMemberName] string username = "")
40+
public static IDatabase OpenTestDatabase(string[] passkeys, AutoSaveMergeBehavior mergeAutoSave = AutoSaveMergeBehavior.DontMergeAndRemoveAutoSaveFile, [CallerMemberName] string username = "")
4141
{
4242
string databaseFile = ComputeDatabaseFilePath(username);
4343
string autoSaveFile = ComputeAutoSaveFilePath(username);

0 commit comments

Comments
 (0)