Skip to content

Commit 854beaa

Browse files
committed
Refactor and add tests
1 parent 96b20f6 commit 854beaa

File tree

7 files changed

+347
-15
lines changed

7 files changed

+347
-15
lines changed

Parse.Tests/LiveQueryDualEventArgsTests.cs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void SetUp()
2525
public void TearDown() => (Client.Services as ServiceHub).Reset();
2626

2727
[TestMethod]
28-
public void TestParseLiveQueryDualEventArgsConstructor()
28+
public void TestConstructor()
2929
{
3030
IObjectState state = new MutableObjectState
3131
{
@@ -48,4 +48,42 @@ public void TestParseLiveQueryDualEventArgsConstructor()
4848
Assert.AreEqual(obj, args.Object);
4949
Assert.AreEqual(objOrig, args.Original);
5050
}
51+
52+
[TestMethod]
53+
public void TestCurrent()
54+
{
55+
IObjectState state = new MutableObjectState
56+
{
57+
ObjectId = "waGiManPutr4Pet1r",
58+
ClassName = "Pagi",
59+
CreatedAt = new DateTime { },
60+
ServerData = new Dictionary<string, object>
61+
{
62+
["username"] = "kevin",
63+
["sessionToken"] = "se551onT0k3n"
64+
}
65+
};
66+
67+
ParseObject objOrig = Client.GenerateObjectFromState<ParseObject>(state, "Corgi");
68+
Assert.ThrowsExactly<ArgumentNullException>(() => new ParseLiveQueryDualEventArgs(null, objOrig));
69+
}
70+
71+
[TestMethod]
72+
public void TestConstructorExceptionOriginal()
73+
{
74+
IObjectState state = new MutableObjectState
75+
{
76+
ObjectId = "waGiManPutr4Pet1r",
77+
ClassName = "Pagi",
78+
CreatedAt = new DateTime { },
79+
ServerData = new Dictionary<string, object>
80+
{
81+
["username"] = "kevin",
82+
["sessionToken"] = "se551onT0k3n"
83+
}
84+
};
85+
86+
ParseObject obj = Client.GenerateObjectFromState<ParseObject>(state, "Corgi");
87+
Assert.ThrowsExactly<ArgumentNullException>(() => new ParseLiveQueryDualEventArgs(obj, null));
88+
}
5189
}

Parse.Tests/LiveQueryErrorEventArgsTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace Parse.Tests;
88
public class LiveQueryErrorEventArgsTests
99
{
1010
[TestMethod]
11-
public void TestParseLiveQueryErrorEventArgsConstructor()
11+
public void TestConstructor()
1212
{
1313
InvalidOperationException exception = new InvalidOperationException("Test exception");
1414
ParseLiveQueryErrorEventArgs args = new ParseLiveQueryErrorEventArgs(42, "Test error", false, exception);
@@ -21,7 +21,7 @@ public void TestParseLiveQueryErrorEventArgsConstructor()
2121
}
2222

2323
[TestMethod]
24-
public void TestParseLiveQueryErrorEventArgsConstructorWithoutException()
24+
public void TestConstructorWithoutException()
2525
{
2626
ParseLiveQueryErrorEventArgs args = new ParseLiveQueryErrorEventArgs(42, "Test error", true);
2727

Parse.Tests/LiveQueryEventArgsTests.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void SetUp()
2525
public void TearDown() => (Client.Services as ServiceHub).Reset();
2626

2727
[TestMethod]
28-
public void TestParseLiveQueryEventArgsConstructor()
28+
public void TestConstructor()
2929
{
3030
IObjectState state = new MutableObjectState
3131
{
@@ -45,4 +45,8 @@ public void TestParseLiveQueryEventArgsConstructor()
4545
// Assert
4646
Assert.AreEqual(obj, args.Object);
4747
}
48+
49+
[TestMethod]
50+
public void TestConstructorException()
51+
=> Assert.ThrowsExactly<ArgumentNullException>(() => new ParseLiveQueryEventArgs(null));
4852
}
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using Microsoft.VisualStudio.TestTools.UnitTesting;
5+
using Parse.Abstractions.Platform.Objects;
6+
using Parse.Infrastructure;
7+
using Parse.Platform.LiveQueries;
8+
using Parse.Platform.Objects;
9+
10+
namespace Parse.Tests;
11+
12+
[TestClass]
13+
public class LiveQuerySubscriptionTests
14+
{
15+
private ParseClient Client { get; } = new ParseClient(new ServerConnectionData { Test = true }, new LiveQueryServerConnectionData { Test = true });
16+
17+
public LiveQuerySubscriptionTests() => Client.Publicize();
18+
19+
[TestInitialize]
20+
public void SetUp()
21+
{
22+
Client.Publicize();
23+
}
24+
25+
[TestCleanup]
26+
public void TearDown() => (Client.Services as ServiceHub).Reset();
27+
28+
[TestMethod]
29+
public void TestConstructor() => Assert.IsNotNull(
30+
new ParseLiveQuerySubscription<ParseObject>(Client.Services, "Foo", 1),
31+
"The subscription instance should not be null.");
32+
33+
[TestMethod]
34+
public void TestConstructorExceptionServiceHub() =>
35+
Assert.ThrowsExactly<ArgumentNullException>(() => new ParseLiveQuerySubscription<ParseObject>(null, "Foo", 1));
36+
37+
[TestMethod]
38+
public void TestConstructorExceptionClassName() =>
39+
Assert.ThrowsExactly<ArgumentException>(() => new ParseLiveQuerySubscription<ParseObject>(Client.Services, String.Empty, 1));
40+
41+
[TestMethod]
42+
public void TestCreate()
43+
{
44+
MutableObjectState state = new()
45+
{
46+
ObjectId = "waGiManPutr4Pet1r",
47+
ClassName = "Corgi",
48+
CreatedAt = new DateTime { },
49+
ServerData = new Dictionary<string, object>
50+
{
51+
["key"] = "value"
52+
}
53+
};
54+
55+
ParseLiveQuerySubscription<ParseObject> subscription = new(Client.Services, "Corgi", 1);
56+
57+
subscription.Create += (_, args) =>
58+
{
59+
Assert.IsNotNull(args, "The event args should not be null.");
60+
Assert.AreEqual(args.Object.ObjectId, state.ObjectId);
61+
Assert.AreEqual(args.Object.ClassName, state.ClassName);
62+
Assert.AreEqual(args.Object["key"], state["key"]);
63+
};
64+
65+
subscription.OnCreate(state);
66+
}
67+
68+
[TestMethod]
69+
public void TestUpdate()
70+
{
71+
MutableObjectState originalState = new()
72+
{
73+
ObjectId = "waGiManPutr4Pet1r",
74+
ClassName = "Corgi",
75+
CreatedAt = new DateTime { },
76+
ServerData = new Dictionary<string, object>
77+
{
78+
["key"] = "before"
79+
}
80+
};
81+
82+
MutableObjectState state = originalState;
83+
state["key"] = "after";
84+
85+
ParseLiveQuerySubscription<ParseObject> subscription = new(Client.Services, "Corgi", 1);
86+
87+
subscription.Update += (_, args) =>
88+
{
89+
Assert.IsNotNull(args, "The event args should not be null.");
90+
91+
Assert.AreEqual(args.Object.ObjectId, state.ObjectId);
92+
Assert.AreEqual(args.Object.ClassName, state.ClassName);
93+
Assert.AreEqual(args.Object["key"], state["key"]);
94+
95+
Assert.AreEqual(args.Original.ObjectId, originalState.ObjectId);
96+
Assert.AreEqual(args.Original.ClassName, originalState.ClassName);
97+
Assert.AreEqual(args.Original["key"], originalState["key"]);
98+
};
99+
100+
subscription.OnUpdate(state, originalState);
101+
}
102+
103+
104+
[TestMethod]
105+
public void TestEnter()
106+
{
107+
MutableObjectState originalState = new()
108+
{
109+
ObjectId = "waGiManPutr4Pet1r",
110+
ClassName = "Corgi",
111+
CreatedAt = new DateTime { },
112+
ServerData = new Dictionary<string, object>
113+
{
114+
["key"] = "before"
115+
}
116+
};
117+
118+
MutableObjectState state = originalState;
119+
state["key"] = "after";
120+
121+
ParseLiveQuerySubscription<ParseObject> subscription = new(Client.Services, "Corgi", 1);
122+
123+
subscription.Enter += (_, args) =>
124+
{
125+
Assert.IsNotNull(args, "The event args should not be null.");
126+
127+
Assert.AreEqual(args.Object.ObjectId, state.ObjectId);
128+
Assert.AreEqual(args.Object.ClassName, state.ClassName);
129+
Assert.AreEqual(args.Object["key"], state["key"]);
130+
131+
Assert.AreEqual(args.Original.ObjectId, originalState.ObjectId);
132+
Assert.AreEqual(args.Original.ClassName, originalState.ClassName);
133+
Assert.AreEqual(args.Original["key"], originalState["key"]);
134+
};
135+
136+
subscription.OnEnter(state, originalState);
137+
}
138+
139+
[TestMethod]
140+
public void TestLeave()
141+
{
142+
MutableObjectState originalState = new()
143+
{
144+
ObjectId = "waGiManPutr4Pet1r",
145+
ClassName = "Corgi",
146+
CreatedAt = new DateTime { },
147+
ServerData = new Dictionary<string, object>
148+
{
149+
["key"] = "before"
150+
}
151+
};
152+
153+
MutableObjectState state = originalState;
154+
state["key"] = "after";
155+
156+
ParseLiveQuerySubscription<ParseObject> subscription = new(Client.Services, "Corgi", 1);
157+
158+
subscription.Leave += (_, args) =>
159+
{
160+
Assert.IsNotNull(args, "The event args should not be null.");
161+
162+
Assert.AreEqual(args.Object.ObjectId, state.ObjectId);
163+
Assert.AreEqual(args.Object.ClassName, state.ClassName);
164+
Assert.AreEqual(args.Object["key"], state["key"]);
165+
166+
Assert.AreEqual(args.Original.ObjectId, originalState.ObjectId);
167+
Assert.AreEqual(args.Original.ClassName, originalState.ClassName);
168+
Assert.AreEqual(args.Original["key"], originalState["key"]);
169+
};
170+
171+
subscription.OnLeave(state, originalState);
172+
}
173+
174+
175+
[TestMethod]
176+
public void TestDelete()
177+
{
178+
MutableObjectState state = new()
179+
{
180+
ObjectId = "waGiManPutr4Pet1r",
181+
ClassName = "Corgi",
182+
CreatedAt = new DateTime { },
183+
ServerData = new Dictionary<string, object>
184+
{
185+
["key"] = "value"
186+
}
187+
};
188+
189+
ParseLiveQuerySubscription<ParseObject> subscription = new(Client.Services, "Corgi", 1);
190+
191+
subscription.Delete += (_, args) =>
192+
{
193+
Assert.IsNotNull(args, "The event args should not be null.");
194+
Assert.AreEqual(args.Object.ObjectId, state.ObjectId);
195+
Assert.AreEqual(args.Object.ClassName, state.ClassName);
196+
Assert.AreEqual(args.Object["key"], state["key"]);
197+
};
198+
199+
subscription.OnDelete(state);
200+
}
201+
}

Parse.Tests/LiveQueryTests.cs

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,33 @@ public void TestConstructor()
4040
Assert.IsTrue(buildParameters.ContainsKey("keys"), "The 'keys' key should be present in the build parameters.");
4141
Assert.IsInstanceOfType<Dictionary<string, object>>(buildParameters["where"], "The 'where' parameter should be a Dictionary<string, object>.");
4242
Assert.IsInstanceOfType<string[]>(buildParameters["keys"], "The 'keys' parameter should be a string array.");
43-
Assert.AreEqual("bar", ((Dictionary<string, object>)buildParameters["where"])["foo"], "The 'where' clause should match the query condition.");
44-
Assert.AreEqual("foo", ((string[])buildParameters["keys"]).First(), "The 'keys' parameter should contain 'foo'.");
43+
Assert.AreEqual("bar", ((Dictionary<string, object>) buildParameters["where"])["foo"], "The 'where' clause should match the query condition.");
44+
Assert.AreEqual("foo", ((string[]) buildParameters["keys"]).First(), "The 'keys' parameter should contain 'foo'.");
45+
Assert.IsFalse(buildParameters.ContainsKey("watch"), "The 'watch' parameter should not be present.");
46+
}
47+
48+
[TestMethod]
49+
public void TestConstructorWithWatchedKeys()
50+
{
51+
ParseLiveQuery<ParseObject> liveQuery = new ParseLiveQuery<ParseObject>(
52+
Client.Services,
53+
"DummyClass",
54+
new Dictionary<string, object> { { "foo", "bar" } },
55+
["foo"],
56+
["foo"]);
57+
58+
// Assert
59+
Assert.AreEqual("DummyClass", liveQuery.ClassName, "The ClassName property of liveQuery should be 'DummyClass'.");
60+
IDictionary<string, object> buildParameters = liveQuery.BuildParameters();
61+
Assert.AreEqual("DummyClass", buildParameters["className"], "The ClassName property of liveQuery should be 'DummyClass'.");
62+
Assert.IsTrue(buildParameters.ContainsKey("where"), "The 'where' key should be present in the build parameters.");
63+
Assert.IsTrue(buildParameters.ContainsKey("keys"), "The 'keys' key should be present in the build parameters.");
64+
Assert.IsInstanceOfType<Dictionary<string, object>>(buildParameters["where"], "The 'where' parameter should be a Dictionary<string, object>.");
65+
Assert.IsInstanceOfType<string[]>(buildParameters["keys"], "The 'keys' parameter should be a string array.");
66+
Assert.AreEqual("bar", ((Dictionary<string, object>) buildParameters["where"])["foo"], "The 'where' clause should match the query condition.");
67+
Assert.AreEqual("foo", ((string[]) buildParameters["keys"]).First(), "The 'keys' parameter should contain 'foo'.");
68+
Assert.IsInstanceOfType<string[]>(buildParameters["watch"], "The 'watch' parameter should be a string array.");
69+
Assert.AreEqual("foo", ((string[]) buildParameters["watch"]).First(), "The 'watch' parameter should contain 'foo'.");
4570
}
4671

4772
[TestMethod]
@@ -53,21 +78,47 @@ public void TestGetLive()
5378
.Select("foo");
5479

5580
// Act
56-
ParseLiveQuery<ParseObject> liveQuery = query.GetLive()
57-
.Watch("foo");
81+
ParseLiveQuery<ParseObject> liveQuery = query.GetLive();
5882

5983
// Assert
6084
Assert.AreEqual("DummyClass", liveQuery.ClassName, "The ClassName property of liveQuery should be 'DummyClass'.");
6185
IDictionary<string, object> buildParameters = liveQuery.BuildParameters();
6286
Assert.AreEqual("DummyClass", buildParameters["className"], "The ClassName property of liveQuery should be 'DummyClass'.");
6387
Assert.IsTrue(buildParameters.ContainsKey("where"), "The 'where' key should be present in the build parameters.");
6488
Assert.IsTrue(buildParameters.ContainsKey("keys"), "The 'keys' key should be present in the build parameters.");
65-
Assert.IsTrue(buildParameters.ContainsKey("watch"), "The 'watch' key should be present in the build parameters.");
6689
Assert.IsInstanceOfType<Dictionary<string, object>>(buildParameters["where"], "The 'where' parameter should be a Dictionary<string, object>.");
6790
Assert.IsInstanceOfType<string[]>(buildParameters["keys"], "The 'keys' parameter should be a string array.");
91+
Assert.AreEqual("bar", ((Dictionary<string, object>) buildParameters["where"])["foo"], "The 'where' clause should match the query condition.");
92+
Assert.AreEqual("foo", ((string[]) buildParameters["keys"]).First(), "The 'keys' parameter should contain 'foo'.");
93+
}
94+
95+
[TestMethod]
96+
public void TestWatch()
97+
{
98+
// Arrange
99+
ParseLiveQuery<ParseObject> liveQuery = new ParseLiveQuery<ParseObject>(
100+
Client.Services,
101+
"DummyClass",
102+
new Dictionary<string, object> { { "foo", "bar" } },
103+
["foo"]);
104+
105+
// Assert
106+
IDictionary<string, object> buildParameters = liveQuery.BuildParameters();
107+
Assert.IsFalse(buildParameters.ContainsKey("watch"), "The 'watch' key should not be present in the build parameters initially.");
108+
109+
// Act
110+
liveQuery = liveQuery.Watch("foo");
111+
112+
// Assert
113+
buildParameters = liveQuery.BuildParameters();
68114
Assert.IsInstanceOfType<string[]>(buildParameters["watch"], "The 'watch' parameter should be a string array.");
69-
Assert.AreEqual("bar", ((Dictionary<string, object>)buildParameters["where"])["foo"], "The 'where' clause should match the query condition.");
70-
Assert.AreEqual("foo", ((string[])buildParameters["keys"]).First(), "The 'keys' parameter should contain 'foo'.");
71-
Assert.AreEqual("foo", ((string[])buildParameters["watch"]).First(), "The 'watch' parameter should contain 'foo'.");
115+
Assert.AreEqual("foo", ((string[]) buildParameters["watch"]).First(), "The 'watch' parameter should contain 'foo'.");
116+
117+
// Act
118+
liveQuery = liveQuery.Watch("bar");
119+
120+
// Assert
121+
buildParameters = liveQuery.BuildParameters();
122+
Assert.Contains("bar", (string[]) buildParameters["watch"], "The 'watch' parameter should contain 'bar'.");
72123
}
73124
}

0 commit comments

Comments
 (0)