-
Notifications
You must be signed in to change notification settings - Fork 388
Expand file tree
/
Copy pathCommonTests.cs
More file actions
210 lines (174 loc) · 7.71 KB
/
Copy pathCommonTests.cs
File metadata and controls
210 lines (174 loc) · 7.71 KB
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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using NUnit.Framework;
using Salesforce.Common.FunctionalTests.Models;
using Salesforce.Common.Models.Json;
namespace Salesforce.Common.FunctionalTests
{
[TestFixture]
public class CommonTests
{
private static readonly string TokenRequestEndpointUrl = ConfigurationManager.AppSettings["TokenRequestEndpointUrl"];
private static string _consumerKey = ConfigurationManager.AppSettings["ConsumerKey"];
private static string _consumerSecret = ConfigurationManager.AppSettings["ConsumerSecret"];
private static string _username = ConfigurationManager.AppSettings["Username"];
private static string _password = ConfigurationManager.AppSettings["Password"];
private IAuthenticationClient _auth;
private IJsonHttpClient _jsonHttpClient;
[TestFixtureSetUp]
public void Init()
{
if (string.IsNullOrEmpty(_consumerKey) && string.IsNullOrEmpty(_consumerSecret) && string.IsNullOrEmpty(_username) && string.IsNullOrEmpty(_password))
{
_consumerKey = Environment.GetEnvironmentVariable("ConsumerKey");
_consumerSecret = Environment.GetEnvironmentVariable("ConsumerSecret");
_username = Environment.GetEnvironmentVariable("Username");
_password = Environment.GetEnvironmentVariable("Password");
}
// Use TLS 1.2 (instead of defaulting to 1.0)
const int SecurityProtocolTypeTls11 = 768;
const int SecurityProtocolTypeTls12 = 3072;
ServicePointManager.SecurityProtocol |= (SecurityProtocolType)(SecurityProtocolTypeTls12 | SecurityProtocolTypeTls11);
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
_auth = new AuthenticationClient();
_auth.UsernamePasswordAsync(_consumerKey, _consumerSecret, _username, _password, TokenRequestEndpointUrl).Wait();
_jsonHttpClient = new JsonHttpClient(_auth.InstanceUrl, _auth.ApiVersion, _auth.AccessToken, new HttpClient());
}
[Test]
public async Task Get_UserInfo()
{
var objectName = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("AccessToken", _auth.AccessToken)
});
var response = await _jsonHttpClient.HttpGetAsync<UserInfo>(new Uri(_auth.Id));
Assert.IsNotNull(response);
}
[Test]
public async Task Query_Describe()
{
const string objectName = "Account";
var response = await _jsonHttpClient.HttpGetAsync<dynamic>(string.Format("sobjects/{0}", objectName));
Assert.IsNotNull(response);
}
[Test]
public async Task Query_Objects()
{
var response = await _jsonHttpClient.HttpGetAsync<DescribeGlobalResult<dynamic>>(string.Format("sobjects"));
Assert.IsTrue(response.MaxBatchSize > 0);
Assert.IsTrue(response.SObjects.Count > 0);
}
[Test]
public async Task Query_Select_Account()
{
const string query = "SELECT Id FROM Account";
var response = await _jsonHttpClient.HttpGetAsync<QueryResult<dynamic>>(string.Format("query?q={0}", query));
Assert.IsTrue(response.TotalSize > 0);
Assert.IsTrue(response.Records.Count > 0);
}
[Test]
public async Task Query_Select_Count()
{
const string query = "SELECT count() FROM Account";
var response = await _jsonHttpClient.HttpGetAsync<QueryResult<dynamic>>(string.Format("query?q={0}", query));
Assert.IsTrue(response.TotalSize > 0);
Assert.IsTrue(response.Records.Count == 0);
}
[Test]
public void Auth_UsernamePassword_HasAccessToken()
{
Assert.That(_auth.AccessToken, Is.Not.Null.And.Not.Empty);
}
[Test]
public void Auth_UsernamePassword_HasInstanceUrl()
{
Assert.That(_auth.InstanceUrl, Is.Not.Null.And.Not.Empty);
}
[Test]
public async Task Auth_InvalidLogin()
{
try
{
await _auth.UsernamePasswordAsync(_consumerKey, _consumerSecret, _username, "WRONGPASSWORD", TokenRequestEndpointUrl);
}
catch (ForceAuthException ex)
{
Assert.IsNotNull(ex);
Assert.IsNotNull(ex.Message);
Assert.IsNotNull(ex.Error);
Assert.IsNotNull(ex.HttpStatusCode);
Assert.AreEqual(ex.Message, "authentication failure");
Assert.AreEqual(ex.Error, Error.InvalidGrant);
Assert.AreEqual(ex.HttpStatusCode, HttpStatusCode.BadRequest);
}
}
[Test]
public async Task Auth_InvalidRequestEndpointUrl()
{
const string requestEndpointUrl = "https://login.salesforce.com/services/oauth2/authorizeee"; // typo in the url
try
{
await _auth.WebServerAsync("clientId", "clientSecret", "sfdc://success", "code", requestEndpointUrl);
}
catch (ForceAuthException ex)
{
Assert.IsNotNull(ex);
Assert.AreEqual(ex.Error, Error.UnknownException);
Assert.AreEqual(ex.Message, "Unexpected character encountered while parsing value: <. Path '', line 0, position 0.");
}
}
[Test]
public async Task Upsert_Update_CheckReturn()
{
var account = new Account { Name = "New Account ExternalID", Description = "New Account Description" };
var response = await _jsonHttpClient.HttpPatchAsync(account, string.Format("sobjects/{0}/{1}/{2}", "Account", "ExternalID__c", "2"));
Assert.IsNotNull(response);
}
[Test]
public async Task Upsert_New_CheckReturnInclude()
{
var account = new Account { Name = "New Account" + DateTime.Now.Ticks, Description = "New Account Description" + DateTime.Now.Ticks };
var response = await _jsonHttpClient.HttpPatchAsync(account, string.Format("sobjects/{0}/{1}/{2}", "Account", "ExternalID__c", DateTime.Now.Ticks));
Assert.IsNotNull(response);
Assert.IsNotNull(response.Id);
}
[Test]
public async Task BadTokenHandling()
{
var badToken = "badtoken";
IJsonHttpClient serviceHttpClient = new JsonHttpClient(_auth.InstanceUrl, _auth.ApiVersion, badToken, new HttpClient());
const string query = "SELECT count() FROM Account";
try
{
await serviceHttpClient.HttpGetAsync<QueryResult<dynamic>>(string.Format("query?q={0}", query));
}
catch (ForceException ex)
{
Assert.IsNotNull(ex);
Assert.IsNotNull(ex.Message);
Assert.That(ex.Message, Is.EqualTo("Session expired or invalid"));
Assert.IsNotNull(ex.Error);
}
}
[Test]
public void CheckInterfaces()
{
using (IAuthenticationClient aa = new AuthenticationClient())
{
Assert.IsNotNull(aa);
}
using (IJsonHttpClient aa = new JsonHttpClient("instanceUrl", "apiVersion", "accessToken", new HttpClient()))
{
Assert.IsNotNull(aa);
}
using (IXmlHttpClient aa = new XmlHttpClient("instanceUrl", "apiVersion", "accessToken", new HttpClient()))
{
Assert.IsNotNull(aa);
}
}
}
}