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

FAI-2155 Bug Vacancy Metric counter not returning correct results #1571

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -31,34 +31,34 @@ public async Task Then_The_Vacancy_Metrics_Are_Returned_And_Aggregated_To_Existi
[Frozen] Mock<IOuterApiClient> apiClient,
AnalyticsAggregator analyticsAggregator)
{
metricData.VacancyReference = vacancyReference;
metricData.VacancyReference = vacancyReference.ToString();
summary.AnalyticsDate = new DateTime(2024, 11, 30);
dateTimeService.Setup(x => x.Now)
.Returns(new DateTime(2024, 11, 30, 12, 00, 00));

queryStoreReader.Setup(x => x.GetVacancyAnalyticsSummaryV2Async(vacancyReference)).ReturnsAsync(
queryStoreReader.Setup(x => x.GetVacancyAnalyticsSummaryV2Async(vacancyReference.ToString())).ReturnsAsync(
new VacancyAnalyticsSummaryV2
{
VacancyReference = vacancyReference,
VacancyReference = vacancyReference.ToString(),
VacancyAnalytics = [summary]
});

var actual = await analyticsAggregator.GetVacancyAnalyticEventSummaryAsync(metricData);

queryStoreWriter.Verify(
x => x.UpsertVacancyAnalyticSummaryV2Async(It.Is<VacancyAnalyticsSummaryV2>(c =>
c.VacancyAnalytics.First(a=>a.AnalyticsDate == new DateTime(2024, 11, 30)).ViewsCount == metricData.ViewsCount
&& c.VacancyAnalytics.First(a=>a.AnalyticsDate == new DateTime(2024, 11, 30)).ApplicationStartedCount == metricData.ApplicationStartedCount
&& c.VacancyAnalytics.First(a=>a.AnalyticsDate == new DateTime(2024, 11, 30)).ApplicationSubmittedCount == metricData.ApplicationSubmittedCount
&& c.VacancyAnalytics.First(a=>a.AnalyticsDate == new DateTime(2024, 11, 30)).SearchResultsCount == metricData.SearchResultsCount)), Times.Once);
c.VacancyAnalytics.First(a => a.AnalyticsDate == new DateTime(2024, 11, 30)).ViewsCount == summary.ViewsCount
&& c.VacancyAnalytics.First(a => a.AnalyticsDate == new DateTime(2024, 11, 30)).ApplicationStartedCount == summary.ApplicationStartedCount
&& c.VacancyAnalytics.First(a => a.AnalyticsDate == new DateTime(2024, 11, 30)).ApplicationSubmittedCount == summary.ApplicationSubmittedCount
&& c.VacancyAnalytics.First(a => a.AnalyticsDate == new DateTime(2024, 11, 30)).SearchResultsCount == summary.SearchResultsCount)), Times.Once);

actual.VacancyReference.Should().Be(vacancyReference);
actual.NoOfApprenticeshipSaved.Should().Be(0);
actual.NoOfApprenticeshipSavedSearchAlerts.Should().Be(0);
actual.NoOfApprenticeshipSearches.Should().Be(metricData.SearchResultsCount);
actual.NoOfApprenticeshipApplicationsCreated.Should().Be(metricData.ApplicationStartedCount);
actual.NoOfApprenticeshipApplicationsSubmitted.Should().Be(metricData.ApplicationSubmittedCount);
actual.NoOfApprenticeshipDetailsViews.Should().Be(metricData.ViewsCount);
actual.NoOfApprenticeshipSearches.Should().Be(summary.SearchResultsCount);
actual.NoOfApprenticeshipApplicationsCreated.Should().Be(summary.ApplicationStartedCount);
actual.NoOfApprenticeshipApplicationsSubmitted.Should().Be(summary.ApplicationSubmittedCount);
actual.NoOfApprenticeshipDetailsViews.Should().Be(summary.ViewsCount);
}
[Test, MoqAutoData]
public async Task Then_The_Vacancy_Metrics_Are_Returned_And_New_Created_If_Not_Exists(
Expand All @@ -71,11 +71,11 @@ public async Task Then_The_Vacancy_Metrics_Are_Returned_And_New_Created_If_Not_E
[Frozen] Mock<IOuterApiClient> apiClient,
AnalyticsAggregator analyticsAggregator)
{
metricData.VacancyReference = vacancyReference;
metricData.VacancyReference = vacancyReference.ToString();
summary.AnalyticsDate = new DateTime(2024, 11, 30);
dateTimeService.Setup(x => x.Now)
.Returns(new DateTime(2024, 11, 30, 12, 00, 00));
queryStoreReader.Setup(x => x.GetVacancyAnalyticsSummaryV2Async(vacancyReference)).ReturnsAsync((VacancyAnalyticsSummaryV2)null);
queryStoreReader.Setup(x => x.GetVacancyAnalyticsSummaryV2Async(vacancyReference.ToString())).ReturnsAsync((VacancyAnalyticsSummaryV2)null);

var actual = await analyticsAggregator.GetVacancyAnalyticEventSummaryAsync(metricData);

Expand Down Expand Up @@ -120,16 +120,16 @@ public async Task Then_The_VacancySummary_Returns_All_Totals(
summary7.AnalyticsDate = new DateTime(2024, 11, 23);
dateTimeService.Setup(x => x.Now)
.Returns(new DateTime(2024, 11, 30, 12, 00, 00));
metricData.VacancyReference = vacancyReference;
metricData.VacancyReference = vacancyReference.ToString();
metricData.ApplicationStartedCount = summary1.ApplicationStartedCount;
metricData.ApplicationSubmittedCount = summary1.ApplicationSubmittedCount;
metricData.ViewsCount = summary1.ViewsCount;
metricData.SearchResultsCount = summary1.SearchResultsCount;
List<VacancyAnalytics> vacancyAnalyticsList = [summary1, summary2, summary3, summary4, summary5, summary6, summary7];
queryStoreReader.Setup(x => x.GetVacancyAnalyticsSummaryV2Async(vacancyReference)).ReturnsAsync(
queryStoreReader.Setup(x => x.GetVacancyAnalyticsSummaryV2Async(vacancyReference.ToString())).ReturnsAsync(
new VacancyAnalyticsSummaryV2
{
VacancyReference = vacancyReference,
VacancyReference = vacancyReference.ToString(),
VacancyAnalytics = vacancyAnalyticsList
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,19 @@ public async Task<VacancyAnalyticsSummary> GetVacancyAnalyticEventSummaryAsync(V
{
VacancyReference = vacancyAnalyticsV2QueueMessage.VacancyReference,
ViewType = nameof(VacancyAnalyticsSummaryV2),
VacancyAnalytics = new List<VacancyAnalytics>()
VacancyAnalytics = []
};
}
if (metrics?.VacancyAnalytics?.FirstOrDefault(c=>c.AnalyticsDate == startDate)!= null)
{
metrics.VacancyAnalytics.First(c=>c.AnalyticsDate == startDate).ApplicationStartedCount = vacancyAnalyticsV2QueueMessage.ApplicationStartedCount;
metrics.VacancyAnalytics.First(c=>c.AnalyticsDate == startDate).ViewsCount = vacancyAnalyticsV2QueueMessage.ViewsCount;
metrics.VacancyAnalytics.First(c=>c.AnalyticsDate == startDate).ApplicationSubmittedCount = vacancyAnalyticsV2QueueMessage.ApplicationSubmittedCount;
metrics.VacancyAnalytics.First(c=>c.AnalyticsDate == startDate).SearchResultsCount = vacancyAnalyticsV2QueueMessage.SearchResultsCount;
metrics.VacancyAnalytics.First(c=>c.AnalyticsDate == startDate).ApplicationStartedCount += vacancyAnalyticsV2QueueMessage.ApplicationStartedCount;
metrics.VacancyAnalytics.First(c=>c.AnalyticsDate == startDate).ViewsCount += vacancyAnalyticsV2QueueMessage.ViewsCount;
metrics.VacancyAnalytics.First(c=>c.AnalyticsDate == startDate).ApplicationSubmittedCount += vacancyAnalyticsV2QueueMessage.ApplicationSubmittedCount;
metrics.VacancyAnalytics.First(c=>c.AnalyticsDate == startDate).SearchResultsCount += vacancyAnalyticsV2QueueMessage.SearchResultsCount;
}
else
{
metrics.VacancyAnalytics.Add(new VacancyAnalytics
metrics.VacancyAnalytics?.Add(new VacancyAnalytics
{
AnalyticsDate = startDate,
ApplicationStartedCount = vacancyAnalyticsV2QueueMessage.ApplicationStartedCount,
Expand All @@ -66,7 +66,7 @@ public async Task<VacancyAnalyticsSummary> GetVacancyAnalyticEventSummaryAsync(V

return new VacancyAnalyticsSummary
{
VacancyReference = vacancyAnalyticsV2QueueMessage.VacancyReference,
VacancyReference = Convert.ToInt32(vacancyAnalyticsV2QueueMessage.VacancyReference),
NoOfApprenticeshipSearches = metrics.VacancyAnalytics.Sum(c=>c.SearchResultsCount),
NoOfApprenticeshipSearchesSevenDaysAgo = sevenDaysAgoTotals.Sum(c=>c.SearchResultsCount),
NoOfApprenticeshipSearchesSixDaysAgo = sixDaysAgoTotals.Sum(c=>c.SearchResultsCount),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ public async Task<VacancyAnalyticsSummary> GetVacancyAnalyticEventSummaryAsync(l

var summary = new VacancyAnalyticsSummary
{
VacancyReference = reader.GetInt64(VacancyReferenceColumnIndex),
VacancyReference = reader.GetInt32(VacancyReferenceColumnIndex),

NoOfApprenticeshipSearches = reader.GetInt32(NoOfApprenticeshipSearchesColumnIndex),
NoOfApprenticeshipSearchesSevenDaysAgo = reader.GetInt32(NoOfApprenticeshipSearchesSevenDaysAgoColumnIndex),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ namespace Esfa.Recruit.Vacancies.Client.Application.Queues.Messages;

public record VacancyAnalyticsV2QueueMessage
{
public long VacancyReference { get; set; }
public string VacancyReference { get; set; }
public int ViewsCount { get; set; }
public int SearchResultsCount { get; set; }
public int ApplicationStartedCount { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace Esfa.Recruit.Vacancies.Client.Infrastructure.OuterApi.Responses;
public class GetVacancyMetricResponse
{
[JsonProperty("vacancyReference")]
public int VacancyReference { get; set; }
public string VacancyReference { get; set; }
[JsonProperty("viewsCount")]
public int ViewsCount { get; set; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@ public interface IQueryStoreReader
Task<long> GetTotalPositionsAvailableCount();
Task<LiveVacancy> GetLiveVacancy(long vacancyReference);
Task<LiveVacancy> GetLiveExpiredVacancy(long vacancyReference);
Task<VacancyAnalyticsSummaryV2> GetVacancyAnalyticsSummaryV2Async(long vacancyReference);
Task<VacancyAnalyticsSummaryV2> GetVacancyAnalyticsSummaryV2Async(string vacancyReference);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public class VacancyAnalyticsSummaryV2 : QueryProjectionBase
public VacancyAnalyticsSummaryV2() : base(QueryViewType.VacancyAnalyticsSummaryV2.TypeName)
{
}
public long VacancyReference { get; set; }
public string VacancyReference { get; set; }
public List<VacancyAnalytics> VacancyAnalytics { get; set; }
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public Task<VacancyAnalyticsSummary> GetVacancyAnalyticsSummaryAsync(long vacanc
return _queryStore.GetAsync<VacancyAnalyticsSummary>(QueryViewType.VacancyAnalyticsSummary.TypeName, key);
}

public Task<VacancyAnalyticsSummaryV2> GetVacancyAnalyticsSummaryV2Async(long vacancyReference)
public Task<VacancyAnalyticsSummaryV2> GetVacancyAnalyticsSummaryV2Async(string vacancyReference)
{
var key = QueryViewType.VacancyAnalyticsSummaryV2.GetIdValue(vacancyReference);

Expand Down
Loading