Skip to content

Commit b05d654

Browse files
authored
Merge pull request #411 from leoslopez/NO-TICKET-add_prefix_field_in_promocode
No ticket add prefix field in promocode
2 parents 5c621d4 + dd36311 commit b05d654

File tree

9 files changed

+77
-18
lines changed

9 files changed

+77
-18
lines changed

Doppler.HtmlEditorApi.Test/http/accounts/_/campaings/_/content/promo-code/_/PutPromoCodeTest.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public async Task PUT_promo_code_should_not_accept_a_expired_token(string url, s
9191
[Theory]
9292
[InlineData($"/accounts/{TestUsersData.EMAIL_TEST1}/campaigns/111/content/promo-code/222", TestUsersData.TOKEN_TEST1_EXPIRE_20330518, 222)]
9393
[InlineData($"/accounts/{TestUsersData.EMAIL_TEST1}/campaigns/111/content/promo-code/222", TestUsersData.TOKEN_SUPERUSER_EXPIRE_20330518, 222)]
94-
public async Task PUT_campaign_should_accept_right_tokens_and_return_Ok(string url, string token, int promoCodeId)
94+
public async Task PUT_promo_code_should_accept_right_tokens_and_return_Ok(string url, string token, int promoCodeId)
9595
{
9696
// Arrange
9797
var dbContextMock = new Mock<IDbContext>();
@@ -114,4 +114,38 @@ public async Task PUT_campaign_should_accept_right_tokens_and_return_Ok(string u
114114
// Assert
115115
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
116116
}
117+
118+
[Fact]
119+
public async Task PUT_promo_code_should_return_NotFound_when_campaign_promocode_relation_does_not_exist()
120+
{
121+
// Arrange
122+
var dbContextMock = new Mock<IDbContext>();
123+
124+
var campaignId = 111;
125+
var promoCodeId = 222;
126+
var endpointPath = $"/accounts/{TestUsersData.EMAIL_TEST1}/campaigns/{campaignId}/content/promo-code/{promoCodeId}";
127+
var token = TestUsersData.TOKEN_SUPERUSER_EXPIRE_20330518;
128+
129+
// Return 0, it does not found CampaignId/PromoCodeId relation to update
130+
dbContextMock
131+
.Setup(x => x.ExecuteAsync(It.Is<UpdatePromoCodeDbQuery>(q => q.Id == promoCodeId && q.IdCampaign == campaignId)))
132+
.ReturnsAsync(0);
133+
134+
var client = _factory.CreateSutClient(serviceToOverride1: dbContextMock.Object, token);
135+
136+
// Act
137+
var response = await client.PutAsync(endpointPath, JsonContent.Create(new
138+
{
139+
type = "type",
140+
value = 10,
141+
includeShipping = true,
142+
firstPurchase = true,
143+
}));
144+
145+
// Assert
146+
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
147+
148+
var responseContent = await response.Content.ReadAsStringAsync();
149+
Assert.Equal("The Campaign/PromoCode relation doesn't exist.", responseContent);
150+
}
117151
}

Doppler.HtmlEditorApi/ApiModels/PromoCode.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ public record PromoCode(
1616
int expireDays,
1717
decimal minPrice,
1818
int maxUses,
19-
string categories
19+
string categories,
20+
string prefix
2021
) : IValidatableObject
2122
{
2223
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { yield break; }
2324
}
24-

Doppler.HtmlEditorApi/Controllers/CampaignsController.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,9 @@ public async Task<Results<NotFound<ProblemDetails>, CreatedAtRoute<ResourceCreat
206206
MinPrice: promoCode.minPrice,
207207
MaxUses: promoCode.maxUses,
208208
Categories: promoCode.categories,
209-
CampaignId: campaignId);
209+
CampaignId: campaignId,
210+
Prefix: promoCode.prefix
211+
);
210212

211213
var result = await _promoCodeRepository.CreatePromoCode(promoCodeModel);
212214

@@ -227,9 +229,16 @@ public async Task<IActionResult> UpdatePromoCode(string accountName, int campaig
227229
ExpireDays: promoCode.expireDays,
228230
MaxUses: promoCode.maxUses,
229231
Categories: promoCode.categories,
230-
CampaignId: campaignId);
232+
CampaignId: campaignId,
233+
Prefix: promoCode.prefix
234+
);
231235

232-
await _promoCodeRepository.UpdatePromoCode(promoCodeModel);
236+
var updateResult = await _promoCodeRepository.UpdatePromoCode(promoCodeModel);
237+
238+
if (!updateResult)
239+
{
240+
return new NotFoundObjectResult("The Campaign/PromoCode relation doesn't exist.");
241+
}
233242

234243
return new OkObjectResult($"Promo code {promoCodeId} was successfully updated.");
235244
}

Doppler.HtmlEditorApi/Domain/PromoCodeModel.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ public record PromoCodeModel(
1111
decimal MinPrice,
1212
int MaxUses,
1313
string Categories,
14-
int CampaignId
14+
int CampaignId,
15+
string Prefix
1516
);

Doppler.HtmlEditorApi/Repositories.DopplerDb/DopplerPromoCodeRepository.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,20 @@ public async Task<int> CreatePromoCode(PromoCodeModel promoCodeModel)
2525
ExpireDays: promoCodeModel.ExpireDays,
2626
MaxUses: promoCodeModel.MaxUses,
2727
Categories: promoCodeModel.Categories,
28-
IdCampaign: promoCodeModel.CampaignId);
28+
IdCampaign: promoCodeModel.CampaignId,
29+
Prefix: promoCodeModel.Prefix
30+
);
2931

3032
var result = await _dbContext.ExecuteAsync(insertPromoCodeDbQuery);
3133

3234
return result.IdDynamicContentPromoCode;
3335
}
3436

35-
public async Task UpdatePromoCode(PromoCodeModel promoCodeModel)
37+
public async Task<bool> UpdatePromoCode(PromoCodeModel promoCodeModel)
3638
{
3739
var updatePromoCodeDbQuery = new UpdatePromoCodeDbQuery(
3840
Id: promoCodeModel.Id,
41+
IdCampaign: promoCodeModel.CampaignId,
3942
Type: promoCodeModel.Type,
4043
Value: promoCodeModel.Value,
4144
IncludeShipping: promoCodeModel.IncludeShipping,
@@ -44,9 +47,12 @@ public async Task UpdatePromoCode(PromoCodeModel promoCodeModel)
4447
MinPrice: promoCodeModel.MinPrice,
4548
ExpireDays: promoCodeModel.ExpireDays,
4649
MaxUses: promoCodeModel.MaxUses,
47-
Categories: promoCodeModel.Categories);
50+
Categories: promoCodeModel.Categories,
51+
Prefix: promoCodeModel.Prefix
52+
);
4853

49-
await _dbContext.ExecuteAsync(updatePromoCodeDbQuery);
54+
var result = await _dbContext.ExecuteAsync(updatePromoCodeDbQuery);
55+
return result > 0;
5056
}
5157
}
5258

Doppler.HtmlEditorApi/Repositories.DopplerDb/Queries/InsertPromoCodeDbQuery.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ public record InsertPromoCodeDbQuery(
1212
int ExpireDays,
1313
int MaxUses,
1414
string? Categories,
15-
int IdCampaign
15+
int IdCampaign,
16+
string Prefix
1617
) : ISingleItemDbQuery<InsertPromoCodeDbQuery.Result>
1718
{
1819
public string GenerateSqlQuery() => @"
@@ -26,7 +27,8 @@ INSERT INTO DynamicContentPromoCode (
2627
ExpireDays,
2728
MaxUses,
2829
Categories,
29-
IdCampaign
30+
IdCampaign,
31+
Prefix
3032
) VALUES (
3133
@Type,
3234
@Value,
@@ -37,7 +39,8 @@ INSERT INTO DynamicContentPromoCode (
3739
@ExpireDays,
3840
@MaxUses,
3941
@Categories,
40-
@IdCampaign
42+
@IdCampaign,
43+
@Prefix
4144
)
4245
4346
SELECT @@Identity AS IdDynamicContentPromoCode";

Doppler.HtmlEditorApi/Repositories.DopplerDb/Queries/UpdatePromoCodeDbQuery.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ namespace Doppler.HtmlEditorApi.Repositories.DopplerDb.Queries;
44

55
public record UpdatePromoCodeDbQuery(
66
int Id,
7+
int IdCampaign,
78
string Type,
89
decimal Value,
910
bool IncludeShipping,
@@ -12,7 +13,8 @@ public record UpdatePromoCodeDbQuery(
1213
decimal MinPrice,
1314
int ExpireDays,
1415
int MaxUses,
15-
string? Categories
16+
string? Categories,
17+
string Prefix
1618
) : IExecutableDbQuery
1719
{
1820
public string GenerateSqlQuery() => @"
@@ -25,6 +27,7 @@ UPDATE DynamicContentPromoCode
2527
MinPrice = @MinPrice,
2628
ExpireDays = @ExpireDays,
2729
MaxUses = @MaxUses,
28-
Categories = @Categories
29-
WHERE IdDynamicContentPromoCode = @Id";
30+
Categories = @Categories,
31+
Prefix = @Prefix
32+
WHERE IdDynamicContentPromoCode = @Id AND IdCampaign = @IdCampaign";
3033
}

Doppler.HtmlEditorApi/Repositories/IPromoCodeRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ namespace Doppler.HtmlEditorApi.Repositories;
66
public interface IPromoCodeRepository
77
{
88
Task<int> CreatePromoCode(PromoCodeModel promoCodeModel);
9-
Task UpdatePromoCode(PromoCodeModel promoCodeModel);
9+
Task<bool> UpdatePromoCode(PromoCodeModel promoCodeModel);
1010
}
1111

cspell-project-words.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,6 @@ unlayer
5656
whatsapp
5757
xunit
5858
jenkins
59+
60+
# Business words
61+
promocode

0 commit comments

Comments
 (0)