From 55cd3c540b59abcfe3e598f9a3d81513104671b4 Mon Sep 17 00:00:00 2001 From: Stephen Liedig Date: Thu, 6 Sep 2018 19:48:19 +0800 Subject: [PATCH] Added tests for SendNotificationTask and ResolveIncidentTask functions. Fixed bugs and refactored DDB persistance to IncidentRepository --- .../AWSStepFunctionsPlagiarismDemo.sln | 12 +++ .../AdminActionTask/AdminActionTask.csproj | 13 +-- .../AdminActionTask/Function.cs | 40 +++------ .../IncidentPersistence/IncidentDocument.cs | 39 --------- .../IncidentPersistence.csproj | 10 +-- .../IncidentPersistence/IncidentRepository.cs | 87 +++++++++++++++++++ .../IncidentState/State.cs | 3 + .../RegisterIncidentTask.csproj | 11 +-- .../FunctionTests.cs | 47 ++++++++++ .../ResolveIncidentTask.Tests.csproj | 18 ++++ .../ResolveIncidentTask/Function.cs | 44 +++------- .../ResolveIncidentTask.csproj | 13 +-- .../ScheduleExamTask/ScheduleExamTask.csproj | 11 +-- .../FunctionTests.cs | 83 ++++++++++++++++++ .../SendNotificationTask.Tests.csproj | 18 ++++ .../SendNotificationTask/Function.cs | 23 +++-- .../SendNotificationTask.csproj | 13 +-- .../ValidateExamTask/ValidateExamTask.csproj | 11 +-- 18 files changed, 333 insertions(+), 163 deletions(-) delete mode 100644 AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentDocument.cs create mode 100644 AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentRepository.cs create mode 100644 AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask.Tests/FunctionTests.cs create mode 100644 AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask.Tests/ResolveIncidentTask.Tests.csproj create mode 100644 AWSStepFunctionsPlagiarismDemo/SendNotificationTask.Tests/FunctionTests.cs create mode 100644 AWSStepFunctionsPlagiarismDemo/SendNotificationTask.Tests/SendNotificationTask.Tests.csproj diff --git a/AWSStepFunctionsPlagiarismDemo/AWSStepFunctionsPlagiarismDemo.sln b/AWSStepFunctionsPlagiarismDemo/AWSStepFunctionsPlagiarismDemo.sln index f1fd2d7..89f86c5 100644 --- a/AWSStepFunctionsPlagiarismDemo/AWSStepFunctionsPlagiarismDemo.sln +++ b/AWSStepFunctionsPlagiarismDemo/AWSStepFunctionsPlagiarismDemo.sln @@ -38,6 +38,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncidentState", "IncidentSt EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IncidentPersistence", "IncidentPersistence\IncidentPersistence.csproj", "{7547FBCA-C693-4190-BED3-7E7B59ABB95C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SendNotificationTask.Tests", "SendNotificationTask.Tests\SendNotificationTask.Tests.csproj", "{7BC85B28-1084-4439-A601-E456631088DC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResolveIncidentTask.Tests", "ResolveIncidentTask.Tests\ResolveIncidentTask.Tests.csproj", "{033FDAFD-267E-4BA0-95EB-8EB112D98A03}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -76,6 +80,14 @@ Global {7547FBCA-C693-4190-BED3-7E7B59ABB95C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7547FBCA-C693-4190-BED3-7E7B59ABB95C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7547FBCA-C693-4190-BED3-7E7B59ABB95C}.Release|Any CPU.Build.0 = Release|Any CPU + {7BC85B28-1084-4439-A601-E456631088DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7BC85B28-1084-4439-A601-E456631088DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7BC85B28-1084-4439-A601-E456631088DC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7BC85B28-1084-4439-A601-E456631088DC}.Release|Any CPU.Build.0 = Release|Any CPU + {033FDAFD-267E-4BA0-95EB-8EB112D98A03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {033FDAFD-267E-4BA0-95EB-8EB112D98A03}.Debug|Any CPU.Build.0 = Debug|Any CPU + {033FDAFD-267E-4BA0-95EB-8EB112D98A03}.Release|Any CPU.ActiveCfg = Release|Any CPU + {033FDAFD-267E-4BA0-95EB-8EB112D98A03}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/AWSStepFunctionsPlagiarismDemo/AdminActionTask/AdminActionTask.csproj b/AWSStepFunctionsPlagiarismDemo/AdminActionTask/AdminActionTask.csproj index e674c98..6a2006d 100644 --- a/AWSStepFunctionsPlagiarismDemo/AdminActionTask/AdminActionTask.csproj +++ b/AWSStepFunctionsPlagiarismDemo/AdminActionTask/AdminActionTask.csproj @@ -1,26 +1,21 @@  - netcoreapp2.1 true Lambda - - - - + + + - - - - + \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/AdminActionTask/Function.cs b/AWSStepFunctionsPlagiarismDemo/AdminActionTask/Function.cs index cf1a324..5a6894e 100644 --- a/AWSStepFunctionsPlagiarismDemo/AdminActionTask/Function.cs +++ b/AWSStepFunctionsPlagiarismDemo/AdminActionTask/Function.cs @@ -1,5 +1,4 @@ using System; -using Amazon; using Amazon.DynamoDBv2; using Amazon.DynamoDBv2.DocumentModel; using Amazon.Lambda.Core; @@ -7,6 +6,7 @@ using Amazon.XRay.Recorder.Handlers.AwsSdk; using IncidentPersistence; using IncidentState; +using Newtonsoft.Json; // Assembly attribute to enable the Lambda function's JSON state to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] @@ -15,14 +15,19 @@ namespace AdminActionTask { public class Function { - private readonly AmazonDynamoDBClient _client; - private readonly string _table_name; + + private readonly IIncidentRepository _incidentRepository; public Function() { + var tableName = Environment.GetEnvironmentVariable("TABLE_NAME"); + _incidentRepository = new IncidentRepository(tableName); + } + + public Function(IIncidentRepository incidentRepository) + { + _incidentRepository = incidentRepository; AWSSDKHandler.RegisterXRayForAllServices(); - _client = new AmazonDynamoDBClient(RegionEndpoint.APSoutheast2); - _table_name = Environment.GetEnvironmentVariable("TABLE_NAME"); } /// @@ -36,30 +41,9 @@ public void FunctionHandler(State state, ILambdaContext context) state.AdminActionRequired = true; state.IncidentResolved = false; state.ResolutionDate = DateTime.Now; - - Document incidentDocument = IncidentDocument.BuildDynamoDbDocument(state); - try - { - Console.WriteLine(""); - var table = Table.LoadTable(_client, _table_name); - table.PutItemAsync(incidentDocument); - } - catch (AmazonDynamoDBException e) - { - Console.WriteLine(e.Message); - throw; - } - catch (AmazonServiceException e) - { - Console.WriteLine(e.Message); - throw; - } - catch (Exception e) - { - Console.WriteLine(e.Message); - throw; - } + _incidentRepository.SaveIncident(state); + } diff --git a/AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentDocument.cs b/AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentDocument.cs deleted file mode 100644 index eb92303..0000000 --- a/AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentDocument.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Amazon.DynamoDBv2.DocumentModel; -using IncidentState; - -namespace IncidentPersistence -{ - public static class IncidentDocument - { - public static Document BuildDynamoDbDocument(State state) - { - var examsList = new DynamoDBList(); - - foreach (var exam in state.Exams) - { - var examMap = new Document - { - {"ExamId", exam.ExamId}, - {"ExamDate", exam.ExamDate}, - {"Score", exam.Score} - }; - - examsList.Add(examMap); - } - - var incidentDocument = new Document - { - ["IncidentId"] = state.IncidentId, - ["StudentId"] = state.StudentId, - ["IncidentDate"] = state.IncidentDate, - ["AdminActionRequired"] = new DynamoDBBool(state.AdminActionRequired), - ["IncidentResolved"] = new DynamoDBBool(state.IncidentResolved), - ["ResolutionDate"] = state.ResolutionDate, - ["Exams"] = examsList - }; - - return incidentDocument; - } - - } -} diff --git a/AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentPersistence.csproj b/AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentPersistence.csproj index a3e9b84..7395b82 100644 --- a/AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentPersistence.csproj +++ b/AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentPersistence.csproj @@ -1,15 +1,11 @@ - - + netcoreapp2.1 - - + - - - + \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentRepository.cs b/AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentRepository.cs new file mode 100644 index 0000000..aa3ee75 --- /dev/null +++ b/AWSStepFunctionsPlagiarismDemo/IncidentPersistence/IncidentRepository.cs @@ -0,0 +1,87 @@ +using System; +using Amazon.DynamoDBv2; +using Amazon.DynamoDBv2.DocumentModel; +using Amazon.Runtime; +using IncidentState; + +namespace IncidentPersistence +{ + + public interface IIncidentRepository + { + void SaveIncident(State state); + } + + public class IncidentRepository : IIncidentRepository + { + private readonly IAmazonDynamoDB _dynamoDb; + private readonly string _tableName; + + public IncidentRepository(string tableName) + { + _dynamoDb = new AmazonDynamoDBClient(); + _tableName = tableName; + } + + public void SaveIncident(State state) + { + var incidentDocument = new IncidentDocument().CreateDocumentFromState(state); + + try + { + Console.WriteLine("Saving incident:{0} to {1}", state.IncidentId.ToString("N"), _tableName); + var table = Table.LoadTable(_dynamoDb, _tableName); + table.PutItemAsync(incidentDocument); + } + catch (AmazonDynamoDBException e) + { + Console.WriteLine(e.Message); + throw; + } + catch (AmazonServiceException e) + { + Console.WriteLine(e.Message); + throw; + } + catch (Exception e) + { + Console.WriteLine(e.Message); + throw; + } + } + } + + internal class IncidentDocument + { + internal Document CreateDocumentFromState(State state) + { + var examsList = new DynamoDBList(); + + foreach (var exam in state.Exams) + { + var examMap = new Document + { + {"ExamId", exam.ExamId}, + {"ExamDate", exam.ExamDate}, + {"Score", exam.Score} + }; + + examsList.Add(examMap); + } + + var incidentDocument = new Document + { + ["IncidentId"] = state.IncidentId, + ["StudentId"] = state.StudentId, + ["IncidentDate"] = state.IncidentDate, + ["AdminActionRequired"] = new DynamoDBBool(state.AdminActionRequired), + ["IncidentResolved"] = new DynamoDBBool(state.IncidentResolved), + ["ResolutionDate"] = state.ResolutionDate, + ["Exams"] = examsList + }; + + return incidentDocument; + } + + } +} diff --git a/AWSStepFunctionsPlagiarismDemo/IncidentState/State.cs b/AWSStepFunctionsPlagiarismDemo/IncidentState/State.cs index 14de4c0..37ff025 100644 --- a/AWSStepFunctionsPlagiarismDemo/IncidentState/State.cs +++ b/AWSStepFunctionsPlagiarismDemo/IncidentState/State.cs @@ -20,13 +20,16 @@ public class Exam public DateTime ExamDate { get; set; } public int Score { get; set; } public ExamResult Result { get; set; } + public bool NotifcationSent { get; set; } public Exam(Guid examId, DateTime examDate, int score) { ExamId = examId; ExamDate = examDate; Score = score; + NotifcationSent = false; } + } public enum ExamResult diff --git a/AWSStepFunctionsPlagiarismDemo/RegisterIncidentTask/RegisterIncidentTask.csproj b/AWSStepFunctionsPlagiarismDemo/RegisterIncidentTask/RegisterIncidentTask.csproj index 2dc906e..84aaefd 100644 --- a/AWSStepFunctionsPlagiarismDemo/RegisterIncidentTask/RegisterIncidentTask.csproj +++ b/AWSStepFunctionsPlagiarismDemo/RegisterIncidentTask/RegisterIncidentTask.csproj @@ -1,24 +1,19 @@  - netcoreapp2.1 true Lambda - - - + + - - - - + \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask.Tests/FunctionTests.cs b/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask.Tests/FunctionTests.cs new file mode 100644 index 0000000..072c8b4 --- /dev/null +++ b/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask.Tests/FunctionTests.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Xunit; +using Amazon.Lambda.TestUtilities; +using IncidentPersistence; +using IncidentState; +using NSubstitute; + +namespace ResolveIncidentTask.Tests +{ + public class FunctionTests + { + public FunctionTests() + { + } + + [Fact] + public void ResolveIncidentFunctionTest() + { + var incidentRepository + = Substitute.For(); + + + var function = new Function(incidentRepository); + var context = new TestLambdaContext(); + + var state = new State + { + IncidentId = Guid.NewGuid(), + StudentId = "123", + IncidentDate = new DateTime(2018, 02, 03), + Exams = new List() + { + new Exam(Guid.NewGuid(), new DateTime(2018, 02, 10), 10), + new Exam(Guid.NewGuid(), new DateTime(2018, 02, 17), 65) + }, + ResolutionDate = null + }; + + + incidentRepository.SaveIncident(state); + incidentRepository.ReceivedCalls(); + + function.FunctionHandler(state, context); + } + } +} \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask.Tests/ResolveIncidentTask.Tests.csproj b/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask.Tests/ResolveIncidentTask.Tests.csproj new file mode 100644 index 0000000..5cfdfa2 --- /dev/null +++ b/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask.Tests/ResolveIncidentTask.Tests.csproj @@ -0,0 +1,18 @@ + + + netcoreapp2.1 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask/Function.cs b/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask/Function.cs index 07f9292..8694c7e 100644 --- a/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask/Function.cs +++ b/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask/Function.cs @@ -1,9 +1,5 @@ using System; -using Amazon; -using Amazon.DynamoDBv2; -using Amazon.DynamoDBv2.DocumentModel; using Amazon.Lambda.Core; -using Amazon.Runtime; using Amazon.XRay.Recorder.Handlers.AwsSdk; using IncidentPersistence; using IncidentState; @@ -15,15 +11,17 @@ namespace ResolveIncidentTask { public class Function { - private readonly AmazonDynamoDBClient _client; - private readonly string _table_name; - + private readonly IIncidentRepository _incidentRepository; public Function() { AWSSDKHandler.RegisterXRayForAllServices(); - _client = new AmazonDynamoDBClient(RegionEndpoint.APSoutheast2); - _table_name = Environment.GetEnvironmentVariable("TABLE_NAME"); + _incidentRepository = new IncidentRepository(Environment.GetEnvironmentVariable("TABLE_NAME")); + } + + public Function(IIncidentRepository incidentRepository) + { + _incidentRepository = incidentRepository; } /// @@ -39,28 +37,10 @@ public void FunctionHandler(State state, ILambdaContext context) state.IncidentResolved = true; state.ResolutionDate = DateTime.Now; - Document incidentDocument = IncidentDocument.BuildDynamoDbDocument(state); - - try - { - var table = Table.LoadTable(_client, _table_name); - table.PutItemAsync(incidentDocument); - } - catch (AmazonDynamoDBException e) - { - Console.WriteLine(e.Message); - throw; - } - catch (AmazonServiceException e) - { - Console.WriteLine(e.Message); - throw; - } - catch (Exception e) - { - Console.WriteLine(e.Message); - throw; - } + _incidentRepository.SaveIncident(state); } } -} + + + +} \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask/ResolveIncidentTask.csproj b/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask/ResolveIncidentTask.csproj index e674c98..6a2006d 100644 --- a/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask/ResolveIncidentTask.csproj +++ b/AWSStepFunctionsPlagiarismDemo/ResolveIncidentTask/ResolveIncidentTask.csproj @@ -1,26 +1,21 @@  - netcoreapp2.1 true Lambda - - - - + + + - - - - + \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/ScheduleExamTask/ScheduleExamTask.csproj b/AWSStepFunctionsPlagiarismDemo/ScheduleExamTask/ScheduleExamTask.csproj index 2dc906e..84aaefd 100644 --- a/AWSStepFunctionsPlagiarismDemo/ScheduleExamTask/ScheduleExamTask.csproj +++ b/AWSStepFunctionsPlagiarismDemo/ScheduleExamTask/ScheduleExamTask.csproj @@ -1,24 +1,19 @@  - netcoreapp2.1 true Lambda - - - + + - - - - + \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/SendNotificationTask.Tests/FunctionTests.cs b/AWSStepFunctionsPlagiarismDemo/SendNotificationTask.Tests/FunctionTests.cs new file mode 100644 index 0000000..a54c24f --- /dev/null +++ b/AWSStepFunctionsPlagiarismDemo/SendNotificationTask.Tests/FunctionTests.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Net; +using Amazon.Lambda.TestUtilities; +using Amazon.SimpleNotificationService; +using Amazon.SimpleNotificationService.Model; +using IncidentState; +using NSubstitute; +using Xunit; + +namespace SendNotificationTask.Tests +{ + public class FunctionTests + { + private readonly TestLambdaContext _context; + private readonly State _stateIn; + + public FunctionTests() + { + _context = new TestLambdaContext(); + + _stateIn = new State + { + IncidentId = Guid.NewGuid(), + StudentId = "123", + IncidentDate = new DateTime(2018, 02, 03), + Exams = new List() + { + new Exam(Guid.NewGuid(), new DateTime(2018, 02, 17), 0), + new Exam(Guid.NewGuid(), new DateTime(2018, 02, 10), 65) + }, + ResolutionDate = null + }; + + } + + + [Fact] + public void NotificationSentSouldBeFalseIfSnsPublishSucceeds() + { + var simpleNotificationService + = Substitute.For(); + + var function = new Function(simpleNotificationService); + + + simpleNotificationService.PublishAsync(Arg.Any()).Returns(new PublishResponse() + { + MessageId = Guid.NewGuid().ToString("N"), + ContentLength = 0, + HttpStatusCode = HttpStatusCode.OK, + ResponseMetadata = null + }); + + var response = function.FunctionHandler(_stateIn, _context); + + Assert.True(response.Exams[0].NotifcationSent == true); + + } + + [Fact] + public void NotificationSentSouldBeFalseIfSnsPublishFails() + { + var simpleNotificationService + = Substitute.For(); + + var function = new Function(simpleNotificationService); + + simpleNotificationService.PublishAsync(Arg.Any()).Returns(new PublishResponse() + { + MessageId = Guid.NewGuid().ToString("N"), + ContentLength = 0, + HttpStatusCode = HttpStatusCode.BadRequest, + ResponseMetadata = null + }); + + var response = function.FunctionHandler(_stateIn, _context); + + Assert.True(response.Exams[0].NotifcationSent == false); + + } + } +} \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/SendNotificationTask.Tests/SendNotificationTask.Tests.csproj b/AWSStepFunctionsPlagiarismDemo/SendNotificationTask.Tests/SendNotificationTask.Tests.csproj new file mode 100644 index 0000000..92c1029 --- /dev/null +++ b/AWSStepFunctionsPlagiarismDemo/SendNotificationTask.Tests/SendNotificationTask.Tests.csproj @@ -0,0 +1,18 @@ + + + netcoreapp2.1 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/SendNotificationTask/Function.cs b/AWSStepFunctionsPlagiarismDemo/SendNotificationTask/Function.cs index f155e68..04351cd 100644 --- a/AWSStepFunctionsPlagiarismDemo/SendNotificationTask/Function.cs +++ b/AWSStepFunctionsPlagiarismDemo/SendNotificationTask/Function.cs @@ -1,6 +1,6 @@ using System; using System.Linq; -using Amazon; +using System.Net; using Amazon.Lambda.Core; using Amazon.SimpleNotificationService; using Amazon.SimpleNotificationService.Model; @@ -14,15 +14,23 @@ namespace SendNotificationTask { public class Function { + private readonly IAmazonSimpleNotificationService _simpleNotificationService; +/* private AmazonSimpleNotificationServiceClient _client; +*/ private string _topicArn; public Function() { AWSSDKHandler.RegisterXRayForAllServices(); - _client = new AmazonSimpleNotificationServiceClient(RegionEndpoint.APSoutheast2); + _simpleNotificationService = new AmazonSimpleNotificationServiceClient(); _topicArn = Environment.GetEnvironmentVariable("TOPIC_ARN"); } + + public Function(IAmazonSimpleNotificationService simpleNotificationService) + { + _simpleNotificationService = simpleNotificationService; + } /// /// Function to send student email about their next scheduled exam. @@ -33,28 +41,31 @@ public Function() public State FunctionHandler(State state, ILambdaContext context) { - var nextExam = state.Exams.LastOrDefault(); + var nextExam = state.Exams.FirstOrDefault(); if (nextExam != null) { var message = $"Dear Student ID {state.StudentId}, you have until {nextExam.ExamDate} to complete you Plagiarism Violation test. Thank you."; var subject = $"Exam Notification for {state.StudentId}"; - _client.PublishAsync(new PublishRequest + var response = _simpleNotificationService.PublishAsync(new PublishRequest { Subject = subject, Message = message, TopicArn = _topicArn }); + if (response.Result.HttpStatusCode == HttpStatusCode.OK) + { + nextExam.NotifcationSent = true; + } + } else { throw new ExamNotFoundException(); } - - return state; } } diff --git a/AWSStepFunctionsPlagiarismDemo/SendNotificationTask/SendNotificationTask.csproj b/AWSStepFunctionsPlagiarismDemo/SendNotificationTask/SendNotificationTask.csproj index cd26d9c..d8479db 100644 --- a/AWSStepFunctionsPlagiarismDemo/SendNotificationTask/SendNotificationTask.csproj +++ b/AWSStepFunctionsPlagiarismDemo/SendNotificationTask/SendNotificationTask.csproj @@ -1,25 +1,20 @@  - netcoreapp2.1 true Lambda - - - - + + + - - - - + \ No newline at end of file diff --git a/AWSStepFunctionsPlagiarismDemo/ValidateExamTask/ValidateExamTask.csproj b/AWSStepFunctionsPlagiarismDemo/ValidateExamTask/ValidateExamTask.csproj index 2dc906e..84aaefd 100644 --- a/AWSStepFunctionsPlagiarismDemo/ValidateExamTask/ValidateExamTask.csproj +++ b/AWSStepFunctionsPlagiarismDemo/ValidateExamTask/ValidateExamTask.csproj @@ -1,24 +1,19 @@  - netcoreapp2.1 true Lambda - - - + + - - - - + \ No newline at end of file