Skip to content

Commit 4fb1f6e

Browse files
authored
Merge pull request #6 from umbraco/feature/hubspot-forms-v9-multi-target
V9 multi-target updates.
2 parents 354ebb1 + 3ae93a7 commit 4fb1f6e

23 files changed

+392
-157
lines changed

src/Umbraco.Cms.Integrations.Commerce.Shopify/Umbraco.Cms.Integrations.Commerce.Shopify.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
3737
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
3838
</Content>
39+
<None Include="build\**\*.*">
40+
<Pack>True</Pack>
41+
<PackagePath>buildTransitive</PackagePath>
42+
</None>
3943
</ItemGroup>
4044

4145
<ItemGroup>

src/Umbraco.Cms.Integrations.Crm.Hubspot.Tests/Controllers/FormsControllerTests.cs

Lines changed: 36 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,18 @@
1-
using System;
2-
using System.Collections.Generic;
1+
using Moq;
2+
using Moq.Protected;
3+
using NUnit.Framework;
4+
using NUnit.Framework.Internal;
5+
using System;
36
using System.IO;
4-
using System.Linq;
57
using System.Net;
68
using System.Net.Http;
7-
using System.Text;
89
using System.Threading;
910
using System.Threading.Tasks;
10-
using System.Web;
11-
using Microsoft.AspNet.SignalR.Hubs;
12-
using Moq;
13-
using Moq.Protected;
14-
using Newtonsoft.Json;
15-
using NUnit.Framework;
16-
using NUnit.Framework.Internal;
1711
using Umbraco.Cms.Integrations.Crm.Hubspot.Configuration;
1812
using Umbraco.Cms.Integrations.Crm.Hubspot.Controllers;
1913
using Umbraco.Cms.Integrations.Crm.Hubspot.Models;
20-
using Umbraco.Cms.Integrations.Crm.Hubspot.Models.Dtos;
2114
using Umbraco.Cms.Integrations.Crm.Hubspot.Services;
2215
using Umbraco.Core.Composing;
23-
using Umbraco.Core.Configuration;
24-
using Umbraco.Core.Configuration.UmbracoSettings;
25-
using Umbraco.Core.Logging;
26-
using Umbraco.Web;
27-
using Umbraco.Web.Routing;
28-
using Umbraco.Web.Security;
2916
using ILogger = Umbraco.Core.Logging.ILogger;
3017

3118
namespace Umbraco.Cms.Integrations.Crm.Hubspot.Tests.Controllers
@@ -39,23 +26,11 @@ public class FormsControllerTests
3926
""correlationId"": ""73f4a25b-7b0a-4537-a490-e5c226619d59""
4027
}";
4128

42-
private readonly string ExpiredOAuthToken = @"{
43-
""status"": ""error"",
44-
""message"": ""This oauth-token is expired! expiresAt: 1643194402611, now: 1643972072320"",
45-
""correlationId"": ""1ae46a55-f5b9-4f68-811a-695a12aaa4f5"",
46-
""category"": ""EXPIRED_AUTHENTICATION"",
47-
""errors"": [
48-
{
49-
""message"": ""The OAuth token used to make this call expired 9 day(s) ago.""
50-
}
51-
]
52-
}";
29+
private HubspotSettings MockedAppSettingsApiSetup;
5330

54-
private Mock<IAppSettings> MockedAppSettingsApiSetup;
31+
private HubspotSettings MockedAppSettingsOAuthSetup;
5532

56-
private Mock<IAppSettings> MockedAppSettingsOAuthSetup;
57-
58-
private Mock<IAppSettings> MockedAppSettingsNoSetup;
33+
private HubspotSettings MockedAppSettingsNoSetup;
5934

6035
private Mock<ILogger> MockedLogger;
6136

@@ -81,7 +56,10 @@ public void Init()
8156
[Test]
8257
public void CheckApiConfiguration_WithApiConfig_ShouldReturnValidConfigurationResponseObjectWithType()
8358
{
84-
var sut = new FormsController(MockedAppSettingsApiSetup.Object, Mock.Of<ITokenService>(), Mock.Of<ILogger>());
59+
var sut = new FormsController(Mock.Of<ITokenService>(), Mock.Of<ILogger>())
60+
{
61+
Options = MockedAppSettingsApiSetup
62+
};
8563

8664
var result = sut.CheckConfiguration();
8765

@@ -92,7 +70,10 @@ public void CheckApiConfiguration_WithApiConfig_ShouldReturnValidConfigurationRe
9270
[Test]
9371
public void CheckOAuthConfiguration_WithOAuthConfigAndNoApiConfig_ShouldReturnValidConfigurationResponseObjectWithType()
9472
{
95-
var sut = new FormsController(MockedAppSettingsOAuthSetup.Object, Mock.Of<ITokenService>(), Mock.Of<ILogger>());
73+
var sut = new FormsController(Mock.Of<ITokenService>(), Mock.Of<ILogger>())
74+
{
75+
Options = MockedAppSettingsOAuthSetup
76+
};
9677

9778
var result = sut.CheckConfiguration();
9879

@@ -107,7 +88,10 @@ public void CheckOAuthConfiguration_WithOAuthConfigAndNoApiConfig_ShouldReturnVa
10788
[Test]
10889
public async Task GetAll_WithoutApiKey_ShouldReturnInvalidResponseObjectWithLoggedInfo()
10990
{
110-
var sut = new FormsController(Mock.Of<IAppSettings>(), Mock.Of<ITokenService>(), MockedLogger.Object);
91+
var sut = new FormsController(Mock.Of<ITokenService>(), MockedLogger.Object)
92+
{
93+
Options = MockedAppSettingsNoSetup
94+
};
11195

11296
var result = await sut.GetAll();
11397

@@ -120,7 +104,8 @@ public async Task GetAll_WithoutApiKey_ShouldReturnInvalidResponseObjectWithLogg
120104
[Test]
121105
public async Task GetAll_WithUnauthorizedRequest_ShouldReturnExpiredResponseObjectWithLoggedError()
122106
{
123-
var sut = new FormsController(MockedAppSettingsApiSetup.Object, Mock.Of<ITokenService>(), MockedLogger.Object);
107+
var sut = new FormsController(Mock.Of<ITokenService>(), MockedLogger.Object);
108+
sut.Options = MockedAppSettingsApiSetup;
124109

125110
var httpClient = CreateMockedHttpClient(HttpStatusCode.Unauthorized, InvalidApiKey);
126111
FormsController.ClientFactory = () => httpClient;
@@ -136,7 +121,8 @@ public async Task GetAll_WithUnauthorizedRequest_ShouldReturnExpiredResponseObje
136121
[Test]
137122
public async Task GetAll_WithSuccessfulRequest_ShouldReturnResponseObjectWithFormsCollection()
138123
{
139-
var sut = new FormsController(MockedAppSettingsApiSetup.Object, Mock.Of<ITokenService>(), MockedLogger.Object);
124+
var sut = new FormsController(Mock.Of<ITokenService>(), MockedLogger.Object);
125+
sut.Options = MockedAppSettingsApiSetup;
140126

141127
var response = File.ReadAllText(TestContext.CurrentContext.TestDirectory + "\\Data\\mockResponseApiSetup.json");
142128

@@ -153,7 +139,8 @@ public async Task GetAll_WithSuccessfulRequest_ShouldReturnResponseObjectWithFor
153139
[Test]
154140
public async Task GetAll_WithFailedRequest_ShouldReturnDefaultResponseObjectWithLoggedError()
155141
{
156-
var sut = new FormsController(MockedAppSettingsApiSetup.Object, Mock.Of<ITokenService>(), MockedLogger.Object);
142+
var sut = new FormsController(Mock.Of<ITokenService>(), MockedLogger.Object);
143+
sut.Options = MockedAppSettingsApiSetup;
157144

158145
var response = File.ReadAllText(TestContext.CurrentContext.TestDirectory + "\\Data\\mockResponseApiSetup.json");
159146

@@ -178,7 +165,7 @@ public async Task GetAllOAuth_WithoutAccessToken_ShouldReturnInvalidResponseObje
178165
{
179166
var mockedTokenService = CreateMockedTokenService(false);
180167

181-
var sut = new FormsController(Mock.Of<IAppSettings>(), mockedTokenService.Object, MockedLogger.Object);
168+
var sut = new FormsController(mockedTokenService.Object, MockedLogger.Object);
182169

183170
var result = await sut.GetAllOAuth();
184171

@@ -193,7 +180,7 @@ public async Task GetAllOAuth_WithUnauthorizedRequest_ShouldReturnExpiredRespons
193180
{
194181
var mockedTokenService = CreateMockedTokenService(true);
195182

196-
var sut = new FormsController(MockedAppSettingsApiSetup.Object, mockedTokenService.Object, MockedLogger.Object);
183+
var sut = new FormsController(mockedTokenService.Object, MockedLogger.Object);
197184

198185
var httpClient = CreateMockedHttpClient(HttpStatusCode.Unauthorized);
199186
FormsController.ClientFactory = () => httpClient;
@@ -211,14 +198,14 @@ public async Task GetAllOAuth_WithSuccessfulRequest_ShouldReturnResponseObjectWi
211198
{
212199
var mockedTokenService = CreateMockedTokenService(true);
213200

214-
var sut = new FormsController(MockedAppSettingsApiSetup.Object, mockedTokenService.Object, MockedLogger.Object);
201+
var sut = new FormsController(mockedTokenService.Object, MockedLogger.Object);
215202

216203
var response = File.ReadAllText(TestContext.CurrentContext.TestDirectory + "\\Data\\mockResponseOAuthSetup.json");
217204

218205
var httpClient = CreateMockedHttpClient(HttpStatusCode.OK, response);
219206
FormsController.ClientFactory = () => httpClient;
220207

221-
var result = await sut.GetAll();
208+
var result = await sut.GetAllOAuth();
222209

223210
Assert.That(result.IsValid, Is.True);
224211
Assert.That(result.IsExpired, Is.False);
@@ -230,14 +217,14 @@ public async Task GetAllOAuth_WithFailedRequest_ShouldReturnDefaultResponseObjec
230217
{
231218
var mockedTokenService = CreateMockedTokenService(true);
232219

233-
var sut = new FormsController(MockedAppSettingsApiSetup.Object, mockedTokenService.Object, MockedLogger.Object);
220+
var sut = new FormsController(mockedTokenService.Object, MockedLogger.Object);
234221

235222
var response = File.ReadAllText(TestContext.CurrentContext.TestDirectory + "\\Data\\mockResponseApiSetup.json");
236223

237224
var httpClient = CreateMockedHttpClient(HttpStatusCode.InternalServerError, response);
238225
FormsController.ClientFactory = () => httpClient;
239226

240-
var result = await sut.GetAll();
227+
var result = await sut.GetAllOAuth();
241228

242229
MockedLogger.Verify(x => x.Error(It.Is<Type>(y => y == typeof(FormsController)), It.IsAny<string>()), Times.Once);
243230

@@ -248,18 +235,11 @@ public async Task GetAllOAuth_WithFailedRequest_ShouldReturnDefaultResponseObjec
248235

249236
#endregion
250237

251-
private static Mock<IAppSettings> CreateMockedAppSettings(bool includeApiKeySettings = false)
238+
private static HubspotSettings CreateMockedAppSettings(bool includeApiKeySettings = false)
252239
{
253-
var mockedAppSettings = new Mock<IAppSettings>();
254-
255-
if (includeApiKeySettings)
256-
{
257-
mockedAppSettings
258-
.Setup(c => c[AppSettingsConstants.UmbracoCmsIntegrationsCrmHubspotApiKey])
259-
.Returns("test-api-key");
260-
}
261-
262-
return mockedAppSettings;
240+
return includeApiKeySettings
241+
? new HubspotSettings {ApiKey = "test-api-key", Region = "eu1"}
242+
: new HubspotSettings { Region = "eu1" };
263243
}
264244

265245
private static Mock<ITokenService> CreateMockedTokenService(bool includeAccessToken)

src/Umbraco.Cms.Integrations.Crm.Hubspot/App_Plugins/UmbracoCms.Integrations/Crm/Hubspot/Render/HubspotForm.cshtml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,24 @@
88
}
99

1010
<script charset="utf-8" type="text/javascript" src="@hbsptScriptPath"></script>
11-
<script>
11+
@if (string.IsNullOrEmpty(region))
12+
{
13+
<script>
14+
hbspt.forms.create({
15+
portalId: "@Model.PortalId",
16+
formId: "@Model.Id"
17+
});
18+
</script>
19+
20+
}
21+
else
22+
{
23+
<script>
1224
hbspt.forms.create({
1325
region: "@region",
1426
portalId: "@Model.PortalId",
1527
formId: "@Model.Id"
1628
});
17-
</script>
29+
</script>
30+
31+
}

src/Umbraco.Cms.Integrations.Crm.Hubspot/Configuration/AppSettingsConstants.cs

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/Umbraco.Cms.Integrations.Crm.Hubspot/Configuration/AppSettingsWrapper.cs

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Collections.Specialized;
2+
3+
namespace Umbraco.Cms.Integrations.Crm.Hubspot.Configuration
4+
{
5+
public class HubspotSettings
6+
{
7+
public HubspotSettings()
8+
{
9+
10+
}
11+
12+
public HubspotSettings(NameValueCollection appSettings)
13+
{
14+
ApiKey = appSettings[Constants.UmbracoCmsIntegrationsCrmHubspotApiKey];
15+
Region = appSettings[Constants.UmbracoCmsIntegrationsCrmHubspotRegion];
16+
}
17+
18+
public string ApiKey { get; set; }
19+
20+
public string Region { get; set; }
21+
}
22+
}

src/Umbraco.Cms.Integrations.Crm.Hubspot/Configuration/IAppSettings.cs

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/Umbraco.Cms.Integrations.Crm.Hubspot/Constants.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
1-
namespace Umbraco.Cms.Integrations.Crm.Hubspot.Models
1+
namespace Umbraco.Cms.Integrations.Crm.Hubspot
22
{
33
using Newtonsoft.Json;
44
using Newtonsoft.Json.Converters;
55
using System.Globalization;
66

77
public static class Constants
88
{
9+
public const string UmbracoCmsIntegrationsCrmHubspotApiKey = "Umbraco.Cms.Integrations.Crm.Hubspot.ApiKey";
10+
11+
public const string UmbracoCmsIntegrationsCrmHubspotRegion = "Umbraco.Cms.Integrations.Crm.Hubspot.Region";
12+
13+
public static class Configuration
14+
{
15+
public const string Settings = "Umbraco:Cms:Integrations:Crm:Hubspot:Settings";
16+
}
17+
918
internal static readonly JsonSerializerSettings SerializationSettings = new JsonSerializerSettings
1019
{
1120
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,

0 commit comments

Comments
 (0)