Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/sales force lead #116

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
e74e164
Add: Advanced config extensions
louisbaggins Sep 23, 2021
fe2855d
Add: ConfiguationExtension tests
louisbaggins Sep 24, 2021
bf6d708
Add: Configuration extension, set configuration tests
louisbaggins Sep 27, 2021
826dd49
Add: Sales force and crm action models
louisbaggins Sep 28, 2021
4fed7e9
Add: Integration service with sales force models
louisbaggins Sep 29, 2021
5323503
Add: Sales force processor with create lead integration service
louisbaggins Sep 29, 2021
12d4dcf
Refac: Separates Salesforce client from SalesForceProcessor in order …
louisbaggins Sep 30, 2021
c9b53ca
Add: SalesForce client integration methods
louisbaggins Oct 5, 2021
7fc6740
Refac: Add equal overide method on crmconfig
louisbaggins Oct 5, 2021
f6f2a27
Refac: Create strategie folder
louisbaggins Oct 6, 2021
7f76b66
Add: Get lead method on sales force client
louisbaggins Oct 8, 2021
7d8fb42
Add: Get lead method on salesforce client
louisbaggins Oct 14, 2021
87ff1b1
Merge with master
louisbaggins Oct 14, 2021
79ad439
Add: ConfigurationExtension substitute on FlowManagerTestsBase
louisbaggins Oct 14, 2021
5ddef20
Refac: Add async suffix on CrmProcessor async methods
louisbaggins Oct 19, 2021
ec250f5
Refac: Method call name
louisbaggins Oct 19, 2021
478f9da
Add: Fail register lead test
louisbaggins Oct 25, 2021
3028def
Fix: Refac crm config JsonProperty to adequate with json naming conve…
louisbaggins Oct 25, 2021
32bf808
Refac: Change SalesForceRoutes to SalesForceUriTemplates
louisbaggins Nov 8, 2021
61d8c5d
Refac: Replace HttpClient for IHttpClientFactory
louisbaggins Dec 3, 2021
3005906
Refac: Enum starting as 1 to assure that default value will never be …
louisbaggins Dec 3, 2021
be80b98
Refac: Remove getDomaind_ShouldFailAsync test since parameter check i…
louisbaggins Dec 9, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
179 changes: 179 additions & 0 deletions src/Take.Blip.Builder.UnitTests/Actions/GetLeadActionTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NSubstitute;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Take.Blip.Builder.Actions.GetLead;
using Take.Blip.Builder.Models;
using Take.Blip.Builder.Strategies;
using Take.Blip.Builder.Utils.SalesForce;
using Take.Blip.Builder.Utils.SalesForce.Models;
using Take.Blip.Client.Extensions.AdvancedConfig;
using Xunit;

namespace Take.Blip.Builder.UnitTests.Actions
{
public class GetLeadActionTests : ActionTestsBase
{
private readonly IConfigurationExtension _configurationExtension = Substitute.For<IConfigurationExtension>();
private readonly ICrmClient _salesForceClient = Substitute.For<ICrmClient>();

private readonly ICrmContext _crmContext;
private readonly GetLeadAction _getLeadAction;

public GetLeadActionTests()
{
_crmContext = new CrmContext();
_getLeadAction = new GetLeadAction(
_salesForceClient,
_crmContext,
_configurationExtension
);
}

[Fact]
public async Task TestGetLeadOnSalesForce_ShouldSuccedAsync()
EricJangola marked this conversation as resolved.
Show resolved Hide resolved
{
// Arrange
var settings = new CrmSettings()
{
Crm = Crm.SalesForce,
LeadId = "1234",
ReturnValue = "sfReturn"
};

var configurationResponse = new CrmConfig()
{
SalesForceConfig = new SalesForceConfig()
{
ClientId = "clientId",
ClientSecret = "clientSecret",
RefreshToken = "refreshToken"
}
};
var salesForceConfig = configurationResponse.SalesForceConfig;

var mockedSalesForceAuth = new AuthorizationResponse
{
AccessToken = "123",
InstanceUrl = "salesforce.com",
TokenType = "Bearer"
};

var mockedSalesForceResponse = new JObject
{
{ "Id", "1234" },
{ "Email", "io@take.net" },
{ "FirstName", "John" },
{ "LastName", "Doe" },
{ "Company", "Take" }
};

// Act
_configurationExtension.GetKeyValueAsync<CrmConfig>(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<CancellationToken>()).Returns(configurationResponse);
_salesForceClient.GetAuthorizationAsync(
Arg.Is<CrmConfig>(sc =>
sc.SalesForceConfig.ClientId == salesForceConfig.ClientId &&
sc.SalesForceConfig.ClientSecret == salesForceConfig.ClientSecret &&
sc.SalesForceConfig.RefreshToken == salesForceConfig.RefreshToken),
Context.OwnerIdentity,
Arg.Any<CancellationToken>())
.Returns(mockedSalesForceAuth);

_salesForceClient.GetLeadAsync(
Arg.Is<CrmSettings>(rl =>
rl.Crm == settings.Crm &&
rl.ReturnValue == settings.ReturnValue
),
Arg.Is<AuthorizationResponse>(ar =>
ar.AccessToken == mockedSalesForceAuth.AccessToken &&
ar.InstanceUrl == mockedSalesForceAuth.InstanceUrl &&
ar.TokenType == mockedSalesForceAuth.TokenType
),
Arg.Any<CancellationToken>()
)
.Returns(mockedSalesForceResponse);

await _getLeadAction.ExecuteAsync(Context, settings, CancellationToken.None);

// Assert
await Context.Received(1).SetVariableAsync(
settings.ReturnValue,
JsonConvert.SerializeObject(mockedSalesForceResponse),
CancellationToken.None
);
}

[Fact]
public async Task TestGetLeadActionTests_ShouldFailAsync()
{
// Arrange
var settings = new CrmSettings()
{
Crm = Crm.SalesForce,
LeadId = "1234",
ReturnValue = "sfReturn"
};

var configurationResponse = new CrmConfig()
{
SalesForceConfig = new SalesForceConfig()
{
ClientId = "clientId",
ClientSecret = "clientSecret",
RefreshToken = "refreshToken"
}
};
var salesForceConfig = configurationResponse.SalesForceConfig;

var mockedSalesForceAuth = new AuthorizationResponse
{
AccessToken = "123",
InstanceUrl = "salesforce.com",
TokenType = "Bearer"
};

var mockedSalesForceResponse = new JObject
{
{ "errorCode", "NOT_FOUND" },
{ "message", "Provided external ID field does not exist or is not accessible" }
};

// Act
_configurationExtension.GetKeyValueAsync<CrmConfig>(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<CancellationToken>()).Returns(configurationResponse);
_salesForceClient.GetAuthorizationAsync(
Arg.Is<CrmConfig>(sc =>
sc.SalesForceConfig.ClientId == salesForceConfig.ClientId &&
sc.SalesForceConfig.ClientSecret == salesForceConfig.ClientSecret &&
sc.SalesForceConfig.RefreshToken == salesForceConfig.RefreshToken),
Context.OwnerIdentity,
Arg.Any<CancellationToken>())
.Returns(mockedSalesForceAuth);

_salesForceClient.GetLeadAsync(
Arg.Is<CrmSettings>(rl =>
rl.Crm == settings.Crm &&
rl.ReturnValue == settings.ReturnValue
),
Arg.Is<AuthorizationResponse>(ar =>
ar.AccessToken == mockedSalesForceAuth.AccessToken &&
ar.InstanceUrl == mockedSalesForceAuth.InstanceUrl &&
ar.TokenType == mockedSalesForceAuth.TokenType
),
Arg.Any<CancellationToken>()
)
.Returns(mockedSalesForceResponse);

await _getLeadAction.ExecuteAsync(Context, settings, CancellationToken.None);

// Assert
await Context.Received(1).SetVariableAsync(
settings.ReturnValue,
JsonConvert.SerializeObject(mockedSalesForceResponse),
CancellationToken.None
);

}
}
}
188 changes: 188 additions & 0 deletions src/Take.Blip.Builder.UnitTests/Actions/RegisterLeadActionTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
using Newtonsoft.Json;
using NSubstitute;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Take.Blip.Builder.Actions.CreateLead;
using Take.Blip.Builder.Models;
using Take.Blip.Builder.Strategies;
using Take.Blip.Builder.Utils.SalesForce;
using Take.Blip.Builder.Utils.SalesForce.Models;
using Take.Blip.Client.Extensions.AdvancedConfig;
using Xunit;

namespace Take.Blip.Builder.UnitTests.Actions
{
public class RegisterLeadActionTests : ActionTestsBase
{
private readonly IConfigurationExtension _configurationExtension = Substitute.For<IConfigurationExtension>();
private readonly ICrmClient _crmClient = Substitute.For<ICrmClient>();

private readonly ICrmContext _crmContext;
private readonly RegisterLeadAction _registerLeadAction;

public RegisterLeadActionTests()
{
_crmContext = new CrmContext();
_registerLeadAction = new RegisterLeadAction(
_crmContext,
_configurationExtension,
_crmClient
);
}

[Fact]
public async Task TestCreateLeadOnSalesForce_ShouldSuccedAsync()
EricJangola marked this conversation as resolved.
Show resolved Hide resolved
{
// Arrange
var settings = new CrmSettings()
{
Crm = Crm.SalesForce,
LeadBody = new Dictionary<string, string>()
{
{ "FirstName", "Gabriel" },
{ "LastName", "Rodrigues" },
{ "Email", "jsdpablo@take.net" },
{ "Company", "Take" },
{ "cidade__c", "Bh" },
{ "Suplemento__c", "Whey" }
},
ReturnValue = "sfReturn"
};

var configurationResponse = new CrmConfig()
{
SalesForceConfig = new SalesForceConfig()
{
ClientId = "clientId",
ClientSecret = "clientSecret",
RefreshToken = "refreshToken"
}
};
var salesForceConfig = configurationResponse.SalesForceConfig;

var mockedSalesForceAuth = new AuthorizationResponse
{
AccessToken = "123",
InstanceUrl = "salesforce.com",
TokenType = "Bearer"
};

var mockedSalesForceResponse = new LeadResponse
{
Message = "Deu",
Succes = true,
Id = "123"
};

// Act
_configurationExtension.GetKeyValueAsync<CrmConfig>(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<CancellationToken>()).Returns(configurationResponse);
_crmClient.GetAuthorizationAsync(
Arg.Is<CrmConfig>(sc =>
sc.SalesForceConfig.ClientId == salesForceConfig.ClientId &&
sc.SalesForceConfig.ClientSecret == salesForceConfig.ClientSecret &&
sc.SalesForceConfig.RefreshToken == salesForceConfig.RefreshToken),
Context.OwnerIdentity,
Arg.Any<CancellationToken>())
.Returns(mockedSalesForceAuth);

_crmClient.CreateLeadAsync(
Arg.Is<CrmSettings>(rl =>
rl.Crm == settings.Crm &&
rl.ReturnValue == settings.ReturnValue
),
Arg.Is<AuthorizationResponse>(ar =>
ar.AccessToken == mockedSalesForceAuth.AccessToken &&
ar.InstanceUrl == mockedSalesForceAuth.InstanceUrl &&
ar.TokenType == mockedSalesForceAuth.TokenType
))
.Returns(mockedSalesForceResponse);

await _registerLeadAction.ExecuteAsync(Context, settings, CancellationToken.None);

// Assert
await Context.Received(1).SetVariableAsync(
settings.ReturnValue,
JsonConvert.SerializeObject(mockedSalesForceResponse),
CancellationToken.None
);
}

[Fact]
public async Task TestCreateLeadOnSalesForce_ShouldFailAsync()
{
// Arrange
var settings = new CrmSettings()
{
Crm = Crm.SalesForce,
LeadBody = new Dictionary<string, string>()
{
{ "FirstName", "Gabriel" },
{ "LastName", "Rodrigues" },
{ "Email", "jsdpablo@take.net" },
{ "Company", "Take" },
{ "cidade__c", "Bh" },
{ "Suplemento__c", "Whey" }
},
ReturnValue = "sfReturn"
};

var configurationResponse = new CrmConfig()
{
SalesForceConfig = new SalesForceConfig()
{
ClientId = "clientId",
ClientSecret = "clientSecret",
RefreshToken = "refreshToken"
}
};
var salesForceConfig = configurationResponse.SalesForceConfig;

var mockedSalesForceAuth = new AuthorizationResponse
{
AccessToken = "123",
InstanceUrl = "salesforce.com",
TokenType = "Bearer"
};

var mockedSalesForceResponse = new LeadResponse
{
Message = "Use one of these records?",
ErrorCode = "DUPLICATES_DETECTED",
Succes = false
};

// Act
_configurationExtension.GetKeyValueAsync<CrmConfig>(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<CancellationToken>()).Returns(configurationResponse);
_crmClient.GetAuthorizationAsync(
Arg.Is<CrmConfig>(sc =>
sc.SalesForceConfig.ClientId == salesForceConfig.ClientId &&
sc.SalesForceConfig.ClientSecret == salesForceConfig.ClientSecret &&
sc.SalesForceConfig.RefreshToken == salesForceConfig.RefreshToken),
Context.OwnerIdentity,
Arg.Any<CancellationToken>())
.Returns(mockedSalesForceAuth);

_crmClient.CreateLeadAsync(
Arg.Is<CrmSettings>(rl =>
rl.Crm == settings.Crm &&
rl.ReturnValue == settings.ReturnValue
),
Arg.Is<AuthorizationResponse>(ar =>
ar.AccessToken == mockedSalesForceAuth.AccessToken &&
ar.InstanceUrl == mockedSalesForceAuth.InstanceUrl &&
ar.TokenType == mockedSalesForceAuth.TokenType
))
.Returns(mockedSalesForceResponse);

await _registerLeadAction.ExecuteAsync(Context, settings, CancellationToken.None);

// Assert
await Context.Received(1).SetVariableAsync(
settings.ReturnValue,
JsonConvert.SerializeObject(mockedSalesForceResponse),
CancellationToken.None
);
}
}
}
Loading