Skip to content

Commit 973db0d

Browse files
committed
feat: Conditionally execute jobs
1 parent 0cc2c65 commit 973db0d

File tree

4 files changed

+11
-39
lines changed

4 files changed

+11
-39
lines changed

Directory.Packages.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<PackageVersion Include="Blazorise.Markdown" Version="[1.8.1]" />
3131
<PackageVersion Include="Markdig" Version="0.44.0" />
3232
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="10.0.1" />
33-
<PackageVersion Include="NCronJob" Version="4.7.0" />
33+
<PackageVersion Include="NCronJob" Version="4.9.0" />
3434
<PackageVersion Include="LinkDotNet.BuildInformation" Version="2.1.2" />
3535
<PackageVersion Include="ReverseMarkdown" Version="4.7.1" />
3636
<PackageVersion Include="System.ServiceModel.Syndication" Version="10.0.1" />
@@ -60,4 +60,4 @@
6060
<PackageVersion Include="Microsoft.Playwright" Version="1.57.0" />
6161
<PackageVersion Include="Spectre.Console" Version="0.54.0" />
6262
</ItemGroup>
63-
</Project>
63+
</Project>

src/LinkDotNet.Blog.Web/Features/SimilarBlogPostJob.cs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,19 @@ public class SimilarBlogPostJob : IJob
1515
{
1616
private readonly IRepository<BlogPost> blogPostRepository;
1717
private readonly IRepository<SimilarBlogPost> similarBlogPostRepository;
18-
private readonly bool showSimilarPosts;
1918

2019
public SimilarBlogPostJob(
2120
IRepository<BlogPost> blogPostRepository,
22-
IRepository<SimilarBlogPost> similarBlogPostRepository,
23-
IOptions<ApplicationConfiguration> applicationConfiguration)
21+
IRepository<SimilarBlogPost> similarBlogPostRepository)
2422
{
25-
ArgumentNullException.ThrowIfNull(applicationConfiguration);
26-
2723
this.blogPostRepository = blogPostRepository;
2824
this.similarBlogPostRepository = similarBlogPostRepository;
29-
showSimilarPosts = applicationConfiguration.Value.ShowSimilarPosts;
3025
}
3126

3227
public async Task RunAsync(IJobExecutionContext context, CancellationToken token)
3328
{
3429
ArgumentNullException.ThrowIfNull(context);
3530

36-
if (!showSimilarPosts)
37-
{
38-
return;
39-
}
40-
4131
var isInstantJobTriggered = context.Parameter is not null;
4232
var noJobPublished = context.ParentOutput is null or 0;
4333
if (noJobPublished && !isInstantJobTriggered)

src/LinkDotNet.Blog.Web/RegistrationExtensions/BackgroundServiceRegistrationExtensions.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using NCronJob;
33
using Microsoft.Extensions.DependencyInjection;
44
using Microsoft.Extensions.Hosting;
5+
using Microsoft.Extensions.Options;
56

67
namespace LinkDotNet.Blog.Web.RegistrationExtensions;
78

@@ -19,10 +20,13 @@ public static void AddBackgroundServices(this IServiceCollection services)
1920
{
2021
options
2122
.AddJob<BlogPostPublisher>(p => p.WithCronExpression("* * * * *"))
22-
.ExecuteWhen(s => s.RunJob<SimilarBlogPostJob>());
23+
.ExecuteWhen(s => s.RunJob<SimilarBlogPostJob>()
24+
.OnlyIf((IOptions<ApplicationConfiguration> applicationConfiguration) => applicationConfiguration.Value.ShowSimilarPosts));
2325

2426
options.AddJob<TransformBlogPostRecordsJob>(p => p.WithCronExpression("0/10 * * * *"));
25-
options.AddJob<SimilarBlogPostJob>();
27+
options.AddJob<SimilarBlogPostJob>(c => c
28+
.WithName(nameof(SimilarBlogPostJob))
29+
.OnlyIf((IOptions<ApplicationConfiguration> applicationConfiguration) => applicationConfiguration.Value.ShowSimilarPosts));
2630
});
2731
}
2832
}

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/SimilarBlogPostJobTests.cs

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,8 @@ public async Task ShouldCalculateSimilarBlogPosts()
2929
await Repository.StoreAsync(blogPost1);
3030
await Repository.StoreAsync(blogPost2);
3131
await Repository.StoreAsync(blogPost3);
32-
var config = Options.Create(new ApplicationConfigurationBuilder().WithShowSimilarPosts(true).Build());
3332

34-
var job = new SimilarBlogPostJob(Repository, similarBlogPostRepository, config);
33+
var job = new SimilarBlogPostJob(Repository, similarBlogPostRepository);
3534
var context = Substitute.For<IJobExecutionContext>();
3635
context.Parameter.Returns(true);
3736
await job.RunAsync(context, CancellationToken.None);
@@ -40,26 +39,6 @@ public async Task ShouldCalculateSimilarBlogPosts()
4039
similarBlogPosts.Count.ShouldBe(3);
4140
}
4241

43-
[Fact]
44-
public async Task ShouldNotCalculateWhenDisabledInApplicationConfiguration()
45-
{
46-
var blogPost1 = new BlogPostBuilder().WithTitle("Title 1").Build();
47-
var blogPost2 = new BlogPostBuilder().WithTitle("Title 2").Build();
48-
var blogPost3 = new BlogPostBuilder().WithTitle("Title 3").Build();
49-
await Repository.StoreAsync(blogPost1);
50-
await Repository.StoreAsync(blogPost2);
51-
await Repository.StoreAsync(blogPost3);
52-
var config = Options.Create(new ApplicationConfigurationBuilder().WithShowSimilarPosts(false).Build());
53-
54-
var job = new SimilarBlogPostJob(Repository, similarBlogPostRepository, config);
55-
var context = Substitute.For<IJobExecutionContext>();
56-
context.Parameter.Returns(true);
57-
await job.RunAsync(context, CancellationToken.None);
58-
59-
var similarBlogPosts = await similarBlogPostRepository.GetAllAsync();
60-
similarBlogPosts.ShouldBeEmpty();
61-
}
62-
6342
[Fact]
6443
public async Task ShouldNotCalculateWhenNotTriggeredAsInstantJob()
6544
{
@@ -69,9 +48,8 @@ public async Task ShouldNotCalculateWhenNotTriggeredAsInstantJob()
6948
await Repository.StoreAsync(blogPost1);
7049
await Repository.StoreAsync(blogPost2);
7150
await Repository.StoreAsync(blogPost3);
72-
var config = Options.Create(new ApplicationConfigurationBuilder().WithShowSimilarPosts(true).Build());
7351

74-
var job = new SimilarBlogPostJob(Repository, similarBlogPostRepository, config);
52+
var job = new SimilarBlogPostJob(Repository, similarBlogPostRepository);
7553
await job.RunAsync(Substitute.For<IJobExecutionContext>(), CancellationToken.None);
7654

7755
var similarBlogPosts = await similarBlogPostRepository.GetAllAsync();

0 commit comments

Comments
 (0)