-
-
Notifications
You must be signed in to change notification settings - Fork 261
/
Copy pathSessionTests.cs
179 lines (144 loc) · 5.91 KB
/
SessionTests.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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Threading;
using Parse.Abstractions.Infrastructure;
using Parse.Abstractions.Platform.Sessions;
using Parse.Infrastructure;
using Parse;
using Parse.Platform.Objects;
using Parse.Abstractions.Platform.Users;
[TestClass]
public class SessionTests
{
private ParseClient Client { get; }
public SessionTests()
{
// Initialize the client
Client = new ParseClient(new ServerConnectionData { Test = true });
Client.Publicize(); // Ensure the client instance is globally available
// Register the valid classes
Client.AddValidClass<ParseSession>();
Client.AddValidClass<ParseUser>();
}
[TestInitialize]
public void SetUp()
{
// Additional setup can go here
}
[TestCleanup]
public void TearDown()
{
// Reset any state if necessary
(Client.Services as ServiceHub)?.Reset();
}
[TestMethod]
public void TestGetSessionQuery()
{
// Test that GetSessionQuery returns the correct type
Assert.IsInstanceOfType(Client.GetSessionQuery(), typeof(ParseQuery<ParseSession>));
}
[TestMethod]
public void TestGetSessionToken()
{
var session = Client.GenerateObjectFromState<ParseSession>(
new MutableObjectState
{
ServerData = new Dictionary<string, object> { ["sessionToken"] = "llaKcolnu" }
},
"_Session"
);
Assert.IsNotNull(session);
Assert.AreEqual("llaKcolnu", session.SessionToken);
}
[TestMethod]
public async Task TestGetCurrentSessionAsync()
{
// Set up the service hub and mock controllers
var hub = new MutableServiceHub();
var client = new ParseClient(new ServerConnectionData { Test = true }, hub);
var sessionState = new MutableObjectState
{
ServerData = new Dictionary<string, object> { ["sessionToken"] = "newllaKcolnu" }
};
// Mock session controller
var mockController = new Mock<IParseSessionController>();
mockController
.Setup(obj => obj.GetSessionAsync(It.IsAny<string>(), It.IsAny<IServiceHub>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(sessionState);
// Mock user controller
var userState = new MutableObjectState
{
ServerData = new Dictionary<string, object> { ["sessionToken"] = "llaKcolnu" }
};
var user = client.GenerateObjectFromState<ParseUser>(userState, "_User");
var mockCurrentUserController = new Mock<IParseCurrentUserController>();
mockCurrentUserController
.Setup(obj => obj.GetAsync(It.IsAny<IServiceHub>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(user);
hub.SessionController = mockController.Object;
hub.CurrentUserController = mockCurrentUserController.Object;
var session = await client.GetCurrentSessionAsync();
// Assertions
Assert.IsNotNull(session);
Assert.AreEqual("newllaKcolnu", session.SessionToken);
// Verify that the session controller was called with the correct session token
mockController.Verify(
obj => obj.GetSessionAsync("llaKcolnu", It.IsAny<IServiceHub>(), It.IsAny<CancellationToken>()),
Times.Once
);
}
[TestMethod]
public async Task TestGetCurrentSessionWithNoCurrentUserAsync()
{
var hub = new MutableServiceHub();
var client = new ParseClient(new ServerConnectionData { Test = true }, hub);
var mockController = new Mock<IParseSessionController>();
var mockCurrentUserController = new Mock<IParseCurrentUserController>();
hub.SessionController = mockController.Object;
hub.CurrentUserController = mockCurrentUserController.Object;
var session = await client.GetCurrentSessionAsync();
// Assertions
Assert.IsNull(session);
}
[TestMethod]
public async Task TestRevokeAsync()
{
var hub = new MutableServiceHub();
var client = new ParseClient(new ServerConnectionData { Test = true }, hub);
var mockController = new Mock<IParseSessionController>();
mockController.Setup(sessionController => sessionController.IsRevocableSessionToken(It.IsAny<string>())).Returns(true);
hub.SessionController = mockController.Object;
using var cancellationTokenSource = new CancellationTokenSource();
await client.RevokeSessionAsync("r:someSession", cancellationTokenSource.Token);
// Assertions
mockController.Verify(
obj => obj.RevokeAsync("r:someSession", cancellationTokenSource.Token),
Times.Once
);
}
[TestMethod]
public async Task TestUpgradeToRevocableSessionAsync()
{
var hub = new MutableServiceHub();
var client = new ParseClient(new ServerConnectionData { Test = true }, hub);
var state = new MutableObjectState
{
ServerData = new Dictionary<string, object> { ["sessionToken"] = "llaKcolnu" }
};
var mockController = new Mock<IParseSessionController>();
mockController
.Setup(obj => obj.UpgradeToRevocableSessionAsync(It.IsAny<string>(), It.IsAny<IServiceHub>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(state);
hub.SessionController = mockController.Object;
using var cancellationTokenSource = new CancellationTokenSource();
var sessionToken = await client.UpgradeToRevocableSessionAsync("someSession", cancellationTokenSource.Token);
// Assertions
Assert.AreEqual("llaKcolnu", sessionToken);
mockController.Verify(
obj => obj.UpgradeToRevocableSessionAsync("someSession", It.IsAny<IServiceHub>(), cancellationTokenSource.Token),
Times.Once
);
}
}