Skip to content
This repository has been archived by the owner on Apr 12, 2023. It is now read-only.

接触情報の送信内容を修正 #1170

Merged
1 commit merged into from
Oct 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
13 changes: 8 additions & 5 deletions Covid19Radar/Covid19Radar/Model/SurveyExposureData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,17 @@ namespace Covid19Radar.Model
{
public class SurveyExposureData
{
[JsonProperty("en_version")]
public string EnVersion { get; set; }

[JsonProperty("daily_summaries")]
public List<DailySummary> DailySummaryList { get; set; }

[JsonProperty("exposure_windows")]
public List<ExposureWindow> ExposureWindowList { get; set; }
public class DailySummary
{
[JsonProperty("DateMillisSinceEpoch")]
public long DateMillisSinceEpoch { get; set; }

[JsonProperty("ExposureDetected")]
public int ExposureDetected { get; set; }
}
}
}

27 changes: 17 additions & 10 deletions Covid19Radar/Covid19Radar/Services/SurveyService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
using System;
using Chino;
using Covid19Radar.Model;
using System.Collections.Generic;
using System.Threading.Tasks;
using Covid19Radar.Repository;
using Newtonsoft.Json.Linq;
using System.Linq;

namespace Covid19Radar.Services
{
Expand All @@ -21,17 +21,14 @@ public class SurveyService : ISurveyService
{
private readonly IEventLogService _eventLogService;
private readonly IExposureDataRepository _exposureDataRepository;
private readonly AbsExposureNotificationApiService _exposureNotificationApiService;

public SurveyService(
IEventLogService eventLogService,
IExposureDataRepository exposureDataRepository,
AbsExposureNotificationApiService exposureNotificationApiService
IExposureDataRepository exposureDataRepository
)
{
_eventLogService = eventLogService;
_exposureDataRepository = exposureDataRepository;
_exposureNotificationApiService = exposureNotificationApiService;
}

public async Task<SurveyContent> BuildSurveyContent(int q1, int q2, DateTime q3, bool isExposureDataProvision)
Expand All @@ -50,15 +47,25 @@ private async Task<SurveyExposureData> GetExopsureData()
{
try
{
long enVersion = await _exposureNotificationApiService.GetVersionAsync();
List<DailySummary> dailySummaryList = await _exposureDataRepository.GetDailySummariesAsync();
List<ExposureWindow> exposureWindowList = await _exposureDataRepository.GetExposureWindowsAsync();
V1ExposureRiskCalculationConfiguration riskConfiguration
= ExposureRiskCalculationConfigurationRepository.CreateDefaultConfiguration();

List<Chino.DailySummary> chinoDailySummaryList
= await _exposureDataRepository.GetDailySummariesAsync();

List<SurveyExposureData.DailySummary> dailySummaryList
= chinoDailySummaryList
.Select(
item => new SurveyExposureData.DailySummary
{
DateMillisSinceEpoch = item.DateMillisSinceEpoch,
ExposureDetected = riskConfiguration.DailySummary_DaySummary_ScoreSum.Cond(item.DaySummary.MaximumScore) ? 1 : 0
})
.ToList();

var exposureData = new SurveyExposureData
{
EnVersion = enVersion.ToString(),
DailySummaryList = dailySummaryList,
ExposureWindowList = exposureWindowList
};

return exposureData;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ V1ExposureRiskCalculationConfiguration config
DateMillisSinceEpoch = GetDateTimeUnixEpochInMillis(-1),
DaySummary = new ExposureSummaryData()
{
MaximumScore = 1,
ScoreSum = 1
}
},
Expand All @@ -94,6 +95,7 @@ V1ExposureRiskCalculationConfiguration config
DateMillisSinceEpoch = GetDateTimeUnixEpochInMillis(-2),
DaySummary = new ExposureSummaryData()
{
MaximumScore = config.DailySummary_DaySummary_ScoreSum.Value - 1,
ScoreSum = config.DailySummary_DaySummary_ScoreSum.Value - 1
}
},
Expand Down Expand Up @@ -141,6 +143,7 @@ V1ExposureRiskCalculationConfiguration config
DateMillisSinceEpoch = GetDateTimeUnixEpochInMillis(-1),
DaySummary = new ExposureSummaryData()
{
MaximumScore = config.DailySummary_DaySummary_ScoreSum.Value,
ScoreSum = config.DailySummary_DaySummary_ScoreSum.Value
}
},
Expand All @@ -149,6 +152,7 @@ V1ExposureRiskCalculationConfiguration config
DateMillisSinceEpoch = GetDateTimeUnixEpochInMillis(-2),
DaySummary = new ExposureSummaryData()
{
MaximumScore = config.DailySummary_DaySummary_ScoreSum.Value + 1,
ScoreSum = config.DailySummary_DaySummary_ScoreSum.Value + 1
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,5 +193,12 @@ V1ExposureRiskCalculationConfiguration newConfiguration
Assert.Equal(result, newConfiguration);
}

[Fact]
public void CreateDefaultConfigurationTests()
{
V1ExposureRiskCalculationConfiguration configuration = ExposureRiskCalculationConfigurationRepository.CreateDefaultConfiguration();
Assert.Equal(1350.0, configuration.DailySummary_DaySummary_ScoreSum.Value);
Assert.Equal(V1ExposureRiskCalculationConfiguration.Threshold.OPERATION_GREATER_EQUAL, configuration.DailySummary_DaySummary_ScoreSum.Op);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,17 @@
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Chino;
using Covid19Radar.Model;
using Covid19Radar.Repository;
using Covid19Radar.Services;
using Covid19Radar.Services.Logs;
using Covid19Radar.UnitTests.Mocks;
using Moq;
using Newtonsoft.Json.Linq;
using Prism.Navigation;
using Xunit;
using Xunit.Abstractions;
using Xunit.Sdk;

namespace Covid19Radar.UnitTests.Services
{
Expand All @@ -26,7 +24,6 @@ public class SurveyServiceTests : IDisposable
private readonly MockRepository _mockRepository;
private readonly Mock<IEventLogService> _mockEventLogService;
private readonly Mock<IExposureDataRepository> _mockExposureDataRepository;
private readonly Mock<AbsExposureNotificationApiService> _mockExposureNotificationApiService;

public SurveyServiceTests(ITestOutputHelper testOutputHelper)
{
Expand All @@ -36,9 +33,6 @@ public SurveyServiceTests(ITestOutputHelper testOutputHelper)
_mockEventLogService = _mockRepository.Create<IEventLogService>();
_mockExposureDataRepository = _mockRepository.Create<IExposureDataRepository>();

Mock<ILoggerService> mockLoggerService = _mockRepository.Create<ILoggerService>();
_mockExposureNotificationApiService = new Mock<AbsExposureNotificationApiService>(mockLoggerService.Object);

MockTimeZoneInfo.SetJstLocalTimeZone();
}

Expand All @@ -51,17 +45,25 @@ private SurveyService CreateService()
{
return new SurveyService(
_mockEventLogService.Object,
_mockExposureDataRepository.Object,
_mockExposureNotificationApiService.Object
);
_mockExposureDataRepository.Object
);
}

[Fact]
public async Task BuildSurveyContentTests_HasExposureDataProvision()
{
_mockExposureNotificationApiService.Setup(x => x.GetVersionAsync()).ReturnsAsync(1234);
_mockExposureDataRepository.Setup(x => x.GetDailySummariesAsync()).ReturnsAsync(new List<DailySummary> { new DailySummary() });
_mockExposureDataRepository.Setup(x => x.GetExposureWindowsAsync()).ReturnsAsync(new List<ExposureWindow> { new ExposureWindow() });
_mockExposureDataRepository.Setup(x => x.GetDailySummariesAsync()).ReturnsAsync(
new List<DailySummary>
{
new DailySummary
{
DateMillisSinceEpoch = 1640962800,
DaySummary = new ExposureSummaryData
{
MaximumScore = 1350.0
}
}
});

SurveyService unitUnderTest = CreateService();
SurveyContent result = await unitUnderTest.BuildSurveyContent(1, 2, new DateTimeOffset(2022, 1, 1, 0, 0, 0, new TimeSpan(9, 0, 0)).DateTime, true);
Expand All @@ -74,13 +76,9 @@ public async Task BuildSurveyContentTests_HasExposureDataProvision()
{
Assert.Equal(1640962800, result.Q3);
}
Assert.Equal("1234", result.ExposureData.EnVersion);
Assert.Single(result.ExposureData.DailySummaryList);
Assert.Single(result.ExposureData.ExposureWindowList);

_mockExposureNotificationApiService.Verify(x => x.GetVersionAsync(), Times.Once());
_mockExposureDataRepository.Verify(x => x.GetDailySummariesAsync(), Times.Once());
_mockExposureDataRepository.Verify(x => x.GetExposureWindowsAsync(), Times.Once());
}

[Fact]
Expand All @@ -99,9 +97,44 @@ public async Task BuildSurveyContentTests_HasNotExposureDataProvision()
}
Assert.Null(result.ExposureData);

_mockExposureNotificationApiService.Verify(x => x.GetVersionAsync(), Times.Never());
_mockExposureDataRepository.Verify(x => x.GetDailySummariesAsync(), Times.Never());
_mockExposureDataRepository.Verify(x => x.GetExposureWindowsAsync(), Times.Never());
}

[Fact]
public async Task BuildSurveyContentTests_DailySummary()
{
_mockExposureDataRepository.Setup(x => x.GetDailySummariesAsync()).ReturnsAsync(
new List<DailySummary>
{
new DailySummary
{
DateMillisSinceEpoch = 1640962800,
DaySummary = new ExposureSummaryData
{
MaximumScore = 1350.0
}
},
new DailySummary
{
DateMillisSinceEpoch = 1640962801,
DaySummary = new ExposureSummaryData
{
MaximumScore = 1349.0
}
}
});

SurveyService unitUnderTest = CreateService();
SurveyContent result = await unitUnderTest.BuildSurveyContent(1, 2, new DateTimeOffset(2022, 1, 1, 0, 0, 0, new TimeSpan(9, 0, 0)).DateTime, true);

List<SurveyExposureData.DailySummary> dailySummaryList = result.ExposureData.DailySummaryList;
Assert.Equal(2, dailySummaryList.Count);
Assert.Equal(1640962800, dailySummaryList[0].DateMillisSinceEpoch);
Assert.Equal(1, dailySummaryList[0].ExposureDetected);
Assert.Equal(1640962801, dailySummaryList[1].DateMillisSinceEpoch);
Assert.Equal(0, dailySummaryList[1].ExposureDetected);

_mockExposureDataRepository.Verify(x => x.GetDailySummariesAsync(), Times.Once());
}

[Fact]
Expand Down