diff --git a/HwProj.NotificationsService/HwProj.NotificationsService.IntegrationTests/HwProj.NotificationsService.IntegrationTests.csproj b/HwProj.NotificationsService/HwProj.NotificationsService.IntegrationTests/HwProj.NotificationsService.IntegrationTests.csproj
new file mode 100644
index 000000000..9f742092a
--- /dev/null
+++ b/HwProj.NotificationsService/HwProj.NotificationsService.IntegrationTests/HwProj.NotificationsService.IntegrationTests.csproj
@@ -0,0 +1,29 @@
+
+
+
+ netcoreapp2.2
+ enable
+
+ false
+
+ latest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HwProj.NotificationsService/HwProj.NotificationsService.IntegrationTests/NotificationsService.IntegrationTests.cs b/HwProj.NotificationsService/HwProj.NotificationsService.IntegrationTests/NotificationsService.IntegrationTests.cs
new file mode 100644
index 000000000..86c0a448c
--- /dev/null
+++ b/HwProj.NotificationsService/HwProj.NotificationsService.IntegrationTests/NotificationsService.IntegrationTests.cs
@@ -0,0 +1,400 @@
+using System;
+using System.Collections.Generic;
+using System.Net.Http;
+using System.Security.Claims;
+using System.Threading;
+using System.Threading.Tasks;
+using AutoFixture;
+using FluentAssertions;
+using HwProj.AuthService.Client;
+using HwProj.CoursesService.Client;
+using HwProj.Models.AuthService.ViewModels;
+using HwProj.Models.CoursesService.ViewModels;
+using HwProj.Models.NotificationsService;
+using HwProj.Models.SolutionsService;
+using HwProj.NotificationsService.Client;
+using HwProj.SolutionsService.Client;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Options;
+using Moq;
+using NUnit.Framework;
+
+
+namespace HwProj.NotificationsService.IntegrationTests
+{
+ [TestFixture]
+ public class NotificationsServiceTests
+ {
+ private AuthServiceClient CreateAuthServiceClient()
+ {
+ var mockIConfiguration = new Mock();
+ mockIConfiguration
+ .Setup(x => x.GetSection("Services")["Auth"])
+ .Returns("http://localhost:5001");
+ var mockClientFactory = new Mock();
+ mockClientFactory
+ .Setup(x => x.CreateClient(Options.DefaultName))
+ .Returns(new HttpClient());
+ return new AuthServiceClient(mockClientFactory.Object, mockIConfiguration.Object);
+ }
+
+ private NotificationsServiceClient CreateNotificationsServiceClient()
+ {
+ var mockIConfiguration = new Mock();
+ mockIConfiguration
+ .Setup(x => x.GetSection("Services")["Notifications"])
+ .Returns("http://localhost:5006");
+ var mockClientFactory = new Mock();
+ mockClientFactory
+ .Setup(x => x.CreateClient(Options.DefaultName))
+ .Returns(new HttpClient());
+ return new NotificationsServiceClient(mockClientFactory.Object, mockIConfiguration.Object);
+ }
+
+ private CoursesServiceClient CreateCourseServiceClient(string userId)
+ {
+ var mockIConfiguration = new Mock();
+ mockIConfiguration
+ .Setup(x => x.GetSection("Services")["Courses"])
+ .Returns("http://localhost:5002");
+ var mockClientFactory = new Mock();
+ mockClientFactory
+ .Setup(x => x.CreateClient(Options.DefaultName))
+ .Returns(new HttpClient());
+ var mockHttpContextAccessor = new Mock();
+ mockHttpContextAccessor
+ .Setup(x => x.HttpContext.User.FindFirst("_id"))
+ .Returns(new Claim("", userId));
+ return new CoursesServiceClient(mockClientFactory.Object, mockHttpContextAccessor.Object,
+ mockIConfiguration.Object);
+ }
+
+ private SolutionsServiceClient CreateSolutionsServiceClient()
+ {
+ var mockIConfiguration = new Mock();
+ mockIConfiguration
+ .Setup(x => x.GetSection("Services")["Solutions"])
+ .Returns("http://localhost:5007");
+ var mockClientFactory = new Mock();
+ mockClientFactory
+ .Setup(x => x.CreateClient(Options.DefaultName))
+ .Returns(new HttpClient());
+ return new SolutionsServiceClient(mockClientFactory.Object, mockIConfiguration.Object);
+ }
+
+ private RegisterViewModel GenerateRegisterViewModel()
+ {
+ var password = new Fixture().Create();
+ var fixture = new Fixture().Build()
+ .With(vm => vm.Password, password)
+ .With(vm => vm.PasswordConfirm, password);
+ var viewModel = fixture.Create();
+ viewModel.Email += "@mail.ru";
+ return viewModel;
+ }
+
+ private CreateCourseViewModel GenerateCreateCourseViewModel()
+ => new Fixture().Build()
+ .With(c => c.IsOpen, true).Create();
+
+ private CreateHomeworkViewModel GenerateCreateHomeworkViewModel()
+ => new Fixture().Build()
+ .With(h => h.Tasks, new List())
+ .Create();
+
+ private CreateTaskViewModel GenerateCreateTaskViewModel()
+ => new Fixture().Build()
+ .With(t => t.HasDeadline, false)
+ .With(t => t.IsDeadlineStrict, false)
+ .Create();
+
+ private SolutionViewModel GenerateSolutionViewModel(string studentId)
+ => new Fixture().Build()
+ .With(s => s.StudentId, studentId)
+ .Create();
+
+ private async Task<(string, string)> CreateAndRegisterUser()
+ {
+ var authClient = CreateAuthServiceClient();
+ var userData = GenerateRegisterViewModel();
+ await authClient.Register(userData);
+ var userId = await authClient.FindByEmailAsync(userData.Email);
+ return (userId, userData.Email);
+ }
+ private async Task<(string, string)> CreateAndRegisterLecture()
+ {
+ var (userId, mail) = await CreateAndRegisterUser();
+ var authClient = CreateAuthServiceClient();
+ await authClient.InviteNewLecturer(new InviteLecturerViewModel() {Email = mail});
+ return (userId, mail);
+ }
+
+ [Test]
+ public async Task NotificationRegisterTest()
+ {
+ var notificationClient = CreateNotificationsServiceClient();
+
+ var (studentId, _) = await CreateAndRegisterUser();
+ var notification1 = await notificationClient.Get(studentId, new NotificationFilter());
+
+ notification1.Should().HaveCount(1);
+ notification1[0].Sender.Should().BeEquivalentTo("AuthService");
+ }
+
+ [Test]
+ public async Task GetMoreThanOneNotificationsTest()
+ {
+ var notificationClient = CreateNotificationsServiceClient();
+
+ var (studentId, _) = await CreateAndRegisterUser();
+ var (lectureId, _) = await CreateAndRegisterLecture();
+ var notificationAfterAcceptUser = await notificationClient.Get(studentId, new NotificationFilter());
+ var studentCourseClient = CreateCourseServiceClient(studentId);
+ var lectureCourseClient = CreateCourseServiceClient(lectureId);
+ var course = GenerateCreateCourseViewModel();
+ var courseId = await lectureCourseClient.CreateCourse(course, lectureId);
+ await studentCourseClient.SignInCourse(courseId, studentId);
+ await lectureCourseClient.AcceptStudent(courseId, studentId);
+
+ var notificationBeforeAcceptUser = await notificationClient.Get(studentId, new NotificationFilter());
+ while (notificationBeforeAcceptUser.Length != 2)
+ {
+ notificationBeforeAcceptUser = await notificationClient.Get(studentId, new NotificationFilter());
+ }
+
+ notificationAfterAcceptUser.Should().HaveCount(1);
+ notificationBeforeAcceptUser.Should().HaveCount(2);
+ }
+
+ [Test]
+ public async Task NotificationAcceptLectureTest()
+ {
+ var (lectureId1, _) = await CreateAndRegisterLecture();
+ var (lectureId2, lectureEmail2) = await CreateAndRegisterLecture();
+ var lecture1CourseClient = CreateCourseServiceClient(lectureId1);
+ var course = GenerateCreateCourseViewModel();
+ var courseId = await lecture1CourseClient.CreateCourse(course, lectureId1);
+ await lecture1CourseClient.AcceptLecturer(courseId, lectureEmail2);
+
+ Thread.Sleep(5000);
+ var notificationClient = CreateNotificationsServiceClient();
+ var notification = await notificationClient.Get(lectureId2, new NotificationFilter());
+
+ notification.Should().Contain(n => n.Sender == "AuthService");
+ }
+
+ [Test]
+ public async Task NotificationLectureAcceptOrRejectStudentTest()
+ {
+ var (lectureId1, _) = await CreateAndRegisterLecture();
+ var (lectureId2, lectureEmail2) = await CreateAndRegisterLecture();
+ var lecture1CourseClient = CreateCourseServiceClient(lectureId1);
+ var course = GenerateCreateCourseViewModel();
+ var courseId = await lecture1CourseClient.CreateCourse(course, lectureId1);
+ await lecture1CourseClient.AcceptLecturer(courseId, lectureEmail2);
+
+ Thread.Sleep(5000);
+ var notificationClient = CreateNotificationsServiceClient();
+ var notification = await notificationClient.Get(lectureId2, new NotificationFilter());
+
+ notification.Should().Contain(n => n.Sender == "AuthService");
+ }
+
+ [Test]
+ public async Task NotificationNewCourseMateTest()
+ {
+ var (studentId, _) = await CreateAndRegisterUser();
+ var (lectureId, _) = await CreateAndRegisterLecture();
+ var (lectureId2, lectureEmail2) = await CreateAndRegisterLecture();
+ var lectureCourseClient = CreateCourseServiceClient(lectureId);
+ var studentCourseClient = CreateCourseServiceClient(studentId);
+ var course = GenerateCreateCourseViewModel();
+ var courseId = await lectureCourseClient.CreateCourse(course, lectureId);
+ await lectureCourseClient.AcceptLecturer(courseId, lectureEmail2);
+ await studentCourseClient.SignInCourse(courseId, studentId);
+
+ Thread.Sleep(5000);
+ var notificationClient = CreateNotificationsServiceClient();
+ var notificationLecture = await notificationClient.Get(lectureId, new NotificationFilter());
+ var notificationLecture2 = await notificationClient.Get(lectureId2, new NotificationFilter());
+
+ notificationLecture.Should().Contain(n => n.Sender == "CourseService");
+ notificationLecture2.Should().Contain(n => n.Sender == "CourseService");
+ }
+
+ [Test]
+ public async Task NotificationNewHomeworkTest()
+ {
+ var (studentId, _) = await CreateAndRegisterUser();
+ var (studentId1, _) = await CreateAndRegisterUser();
+ var (lectureId, _) = await CreateAndRegisterLecture();
+ var lectureCourseClient = CreateCourseServiceClient(lectureId);
+ var studentCourseClient = CreateCourseServiceClient(studentId);
+ var student1CourseClient = CreateCourseServiceClient(studentId1);
+ var course = GenerateCreateCourseViewModel();
+ var courseId = await lectureCourseClient.CreateCourse(course, lectureId);
+ await studentCourseClient.SignInCourse(courseId, studentId);
+ await lectureCourseClient.AcceptStudent(courseId, studentId);
+ await student1CourseClient.SignInCourse(courseId, studentId1);
+ await lectureCourseClient.AcceptStudent(courseId, studentId1);
+
+ var hwCreateViewModel = GenerateCreateHomeworkViewModel();
+ var taskCreateViewModel = GenerateCreateTaskViewModel();
+ var homeworkId = await lectureCourseClient.AddHomeworkToCourse(hwCreateViewModel, courseId);
+ await lectureCourseClient.AddTask(taskCreateViewModel, homeworkId.Value);
+
+ Thread.Sleep(5000);
+ var notificationClient = CreateNotificationsServiceClient();
+ var notificationStudent = await notificationClient.Get(studentId, new NotificationFilter());
+ var notificationStudent1 = await notificationClient.Get(studentId1, new NotificationFilter());
+
+ notificationStudent.Should().Contain(n => n.Sender == "CourseService");
+ notificationStudent1.Should().Contain(n => n.Sender == "CourseService");
+ }
+
+ [Test]
+ public async Task NotificationUpdateHomeworkTest()
+ {
+ var (studentId, _) = await CreateAndRegisterUser();
+ var (studentId1, _) = await CreateAndRegisterUser();
+ var (lectureId, _) = await CreateAndRegisterLecture();
+ var lectureCourseClient = CreateCourseServiceClient(lectureId);
+ var studentCourseClient = CreateCourseServiceClient(studentId);
+ var student1CourseClient = CreateCourseServiceClient(studentId1);
+ var course = GenerateCreateCourseViewModel();
+ var courseId = await lectureCourseClient.CreateCourse(course, lectureId);
+ await studentCourseClient.SignInCourse(courseId, studentId);
+ await lectureCourseClient.AcceptStudent(courseId, studentId);
+ await student1CourseClient.SignInCourse(courseId, studentId1);
+ await lectureCourseClient.AcceptStudent(courseId, studentId1);
+
+ var hwCreateViewModel = GenerateCreateHomeworkViewModel();
+ var taskCreateViewModel = GenerateCreateTaskViewModel();
+ var homeworkId = await lectureCourseClient.AddHomeworkToCourse(hwCreateViewModel, courseId);
+ hwCreateViewModel.Description = "Update";
+ await lectureCourseClient.UpdateHomework(hwCreateViewModel, homeworkId.Value);
+ var taskId = await lectureCourseClient.AddTask(taskCreateViewModel, homeworkId.Value);
+
+ Thread.Sleep(5000);
+ var notificationClient = CreateNotificationsServiceClient();
+ var notificationStudent = await notificationClient.Get(studentId, new NotificationFilter());
+ var notificationStudent1 = await notificationClient.Get(studentId1, new NotificationFilter());
+
+ var notificationBody = $"В курсе {course.Name} домашнее задание {hwCreateViewModel.Title} обновлено.";
+
+ notificationStudent.Should().Contain(n => n.Body == notificationBody);
+ notificationStudent1.Should().Contain(n => n.Body == notificationBody);
+ }
+
+ [Test]
+ public async Task NotificationUpdateTaskMaxRatingTest()
+ {
+ var (studentId, _) = await CreateAndRegisterUser();
+ var (studentId1, _) = await CreateAndRegisterUser();
+ var (lectureId, _) = await CreateAndRegisterLecture();
+ var lectureCourseClient = CreateCourseServiceClient(lectureId);
+ var studentCourseClient = CreateCourseServiceClient(studentId);
+ var student1CourseClient = CreateCourseServiceClient(studentId1);
+ var course = GenerateCreateCourseViewModel();
+ var courseId = await lectureCourseClient.CreateCourse(course, lectureId);
+ await studentCourseClient.SignInCourse(courseId, studentId);
+ await lectureCourseClient.AcceptStudent(courseId, studentId);
+ await student1CourseClient.SignInCourse(courseId, studentId1);
+ await lectureCourseClient.AcceptStudent(courseId, studentId1);
+
+ var hwCreateViewModel = GenerateCreateHomeworkViewModel();
+ var taskCreateViewModel = GenerateCreateTaskViewModel();
+ var homeworkId = await lectureCourseClient.AddHomeworkToCourse(hwCreateViewModel, courseId);
+ var taskId = await lectureCourseClient.AddTask(taskCreateViewModel, homeworkId.Value);
+ taskCreateViewModel.Description = "Update";
+ await lectureCourseClient.UpdateTask(taskCreateViewModel, taskId.Value);
+
+ Thread.Sleep(5000);
+ var notificationClient = CreateNotificationsServiceClient();
+ var notificationStudent = await notificationClient.Get(studentId, new NotificationFilter());
+ var notificationStudent1 = await notificationClient.Get(studentId1, new NotificationFilter());
+
+ var notificationBody = $"Задача обновлена.";
+
+ notificationStudent.Should().Contain(n => n.Body == notificationBody);
+ notificationStudent1.Should().Contain(n => n.Body == notificationBody);
+ }
+
+ [Test]
+ public async Task NotificationStudentPassTaskTest()
+ {
+ var (studentId, _) = await CreateAndRegisterUser();
+ var (lectureId, _) = await CreateAndRegisterLecture();
+ var (lectureId2, lectureEmail2) = await CreateAndRegisterLecture();
+ var lectureCourseClient = CreateCourseServiceClient(lectureId);
+ var studentCourseClient = CreateCourseServiceClient(studentId);
+ var course = GenerateCreateCourseViewModel();
+ var courseId = await lectureCourseClient.CreateCourse(course, lectureId);
+ await lectureCourseClient.AcceptLecturer(courseId, lectureEmail2);
+ await studentCourseClient.SignInCourse(courseId, studentId);
+ await lectureCourseClient.AcceptStudent(courseId, studentId);
+
+ var hwCreateViewModel = GenerateCreateHomeworkViewModel();
+ var taskCreateViewModel = GenerateCreateTaskViewModel();
+ var homeworkId = await lectureCourseClient.AddHomeworkToCourse(hwCreateViewModel, courseId);
+ var taskId = await lectureCourseClient.AddTask(taskCreateViewModel, homeworkId.Value);
+ var solutionViewModel = GenerateSolutionViewModel(studentId);
+ var solutionServiceClient = CreateSolutionsServiceClient();
+ var solutionId = await solutionServiceClient.PostSolution(solutionViewModel, taskId.Value);
+
+ Thread.Sleep(5000);
+ var notificationClient = CreateNotificationsServiceClient();
+ var notificationLecture = await notificationClient.Get(lectureId, new NotificationFilter());
+ var notificationLecture2 = await notificationClient.Get(lectureId2, new NotificationFilter());
+
+ notificationLecture.Should().Contain(n => n.Sender == "SolutionService");
+ notificationLecture2.Should().Contain(n => n.Sender == "SolutionService");
+ }
+
+ [Test]
+ public async Task NotificationRateTest()
+ {
+ var (studentId, _) = await CreateAndRegisterUser();
+ var (lectureId, _) = await CreateAndRegisterLecture();
+ var lectureCourseClient = CreateCourseServiceClient(lectureId);
+ var studentCourseClient = CreateCourseServiceClient(studentId);
+ var course = GenerateCreateCourseViewModel();
+ var courseId = await lectureCourseClient.CreateCourse(course, lectureId);
+ await studentCourseClient.SignInCourse(courseId, studentId);
+ await lectureCourseClient.AcceptStudent(courseId, studentId);
+
+ var hwCreateViewModel = GenerateCreateHomeworkViewModel();
+ var taskCreateViewModel = GenerateCreateTaskViewModel();
+ var homeworkId = await lectureCourseClient.AddHomeworkToCourse(hwCreateViewModel, courseId);
+ var taskId = await lectureCourseClient.AddTask(taskCreateViewModel, homeworkId.Value);
+ var solutionViewModel = GenerateSolutionViewModel(studentId);
+ var solutionServiceClient = CreateSolutionsServiceClient();
+ var solutionId = await solutionServiceClient.PostSolution(solutionViewModel, taskId.Value);
+ await solutionServiceClient.RateSolution(solutionId, 3, "", lectureId);
+
+ Thread.Sleep(5000);
+ var notificationClient = CreateNotificationsServiceClient();
+ var notificationLecture = await notificationClient.Get(studentId, new NotificationFilter());
+
+ notificationLecture.Should().Contain(n => n.Sender == "SolutionService");
+ }
+
+ [Test]
+ public async Task CheckMarkAsSeenTest()
+ {
+ var notificationClient = CreateNotificationsServiceClient();
+
+ var (userId, _) = await CreateAndRegisterUser();
+ var notificationBefore = await notificationClient.Get(userId, new NotificationFilter());
+ var notificationId = new long[1]{notificationBefore[0].Id};
+ await notificationClient.MarkAsSeen(userId, notificationId);
+ var notificationAfter = await notificationClient.Get(userId, new NotificationFilter());
+
+ notificationBefore.Should().HaveCount(1);
+ notificationBefore[0].HasSeen.Should().BeFalse();
+ notificationAfter.Should().HaveCount(1);
+ notificationAfter[0].HasSeen.Should().BeTrue();
+ }
+ }
+}
\ No newline at end of file
diff --git a/HwProj.NotificationsService/HwProj.NotificationsService.Tests/HwProj.NotificationsService.Tests.csproj b/HwProj.NotificationsService/HwProj.NotificationsService.Tests/HwProj.NotificationsService.Tests.csproj
index f2af1e77f..b207bf4fa 100644
--- a/HwProj.NotificationsService/HwProj.NotificationsService.Tests/HwProj.NotificationsService.Tests.csproj
+++ b/HwProj.NotificationsService/HwProj.NotificationsService.Tests/HwProj.NotificationsService.Tests.csproj
@@ -11,10 +11,18 @@
+
+
+
+
+
+
+
+
diff --git a/HwProj.sln b/HwProj.sln
index 786e01d33..b793a711c 100644
--- a/HwProj.sln
+++ b/HwProj.sln
@@ -40,6 +40,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HwProj.APIGateway.API", "Hw
{F584B68E-B6A8-46F1-A692-CB87DE9996BE} = {F584B68E-B6A8-46F1-A692-CB87DE9996BE}
EndProjectSection
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HwProj.AuthService.Tests", "HwProj.AuthService\HwProj.AuthService.Tests\HwProj.AuthService.Tests.csproj", "{34A014AB-BC00-4AFF-B08F-D8280734C869}"
+ ProjectSection(ProjectDependencies) = postProject
+ {7ECE830B-68EA-4BA3-BDEC-0D1E9FACB19A} = {7ECE830B-68EA-4BA3-BDEC-0D1E9FACB19A}
+ EndProjectSection
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HwProj.Models", "HwProj.Common\HwProj.Models\HwProj.Models.csproj", "{ECFA80DA-E0F5-4613-A15E-55FC8B9C8401}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HwProj.AuthService.Client", "HwProj.AuthService\HwProj.AuthService.Client\HwProj.AuthService.Client.csproj", "{8F56C068-4827-412F-A29A-419B8AC5BECD}"
@@ -64,6 +69,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HwProj.SolutionsService.Cli
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HwProj.Exceptions", "HwProj.Common\HwProj.Exceptions\HwProj.Exceptions.csproj", "{51463655-7668-4C7D-9FDE-D4D7CDAA82B8}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HwProj.NotificationsService.IntegrationTests", "HwProj.NotificationsService\HwProj.NotificationsService.IntegrationTests\HwProj.NotificationsService.IntegrationTests.csproj", "{E6370DC6-B123-4233-B95F-2C505EA47BF5}"
+EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HwProj.AuthService.IntegrationTests", "HwProj.AuthService\HwProj.AuthService.IntegrationTests\HwProj.AuthService.IntegrationTests.csproj", "{EA822D2F-88C2-4B82-AA20-DD07FF0A9A1E}"
EndProject
Global
@@ -112,6 +119,8 @@ Global
{1407B364-9938-42C3-B061-30BE3F96FE02}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1407B364-9938-42C3-B061-30BE3F96FE02}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1407B364-9938-42C3-B061-30BE3F96FE02}.Release|Any CPU.Build.0 = Release|Any CPU
+ {34A014AB-BC00-4AFF-B08F-D8280734C869}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {34A014AB-BC00-4AFF-B08F-D8280734C869}.Release|Any CPU.Build.0 = Release|Any CPU
{ECFA80DA-E0F5-4613-A15E-55FC8B9C8401}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ECFA80DA-E0F5-4613-A15E-55FC8B9C8401}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ECFA80DA-E0F5-4613-A15E-55FC8B9C8401}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -154,8 +163,8 @@ Global
{51463655-7668-4C7D-9FDE-D4D7CDAA82B8}.Release|Any CPU.Build.0 = Release|Any CPU
{EA822D2F-88C2-4B82-AA20-DD07FF0A9A1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EA822D2F-88C2-4B82-AA20-DD07FF0A9A1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EA822D2F-88C2-4B82-AA20-DD07FF0A9A1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EA822D2F-88C2-4B82-AA20-DD07FF0A9A1E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E6370DC6-B123-4233-B95F-2C505EA47BF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E6370DC6-B123-4233-B95F-2C505EA47BF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -171,6 +180,7 @@ Global
{2B4D695D-1BAA-4BCC-AE5A-C1CDD4ACCCCA} = {1EAEB779-E7C8-4EF9-B9A9-22CB8E3C246D}
{7ECE830B-68EA-4BA3-BDEC-0D1E9FACB19A} = {D7F8BC73-A6CB-4E07-984D-2D65B740BC69}
{1407B364-9938-42C3-B061-30BE3F96FE02} = {DC0D1EE7-D2F8-4D15-8CC6-69A0A0A938D9}
+ {34A014AB-BC00-4AFF-B08F-D8280734C869} = {D7F8BC73-A6CB-4E07-984D-2D65B740BC69}
{ECFA80DA-E0F5-4613-A15E-55FC8B9C8401} = {77D857A8-45C6-4432-B4BF-A2F2C9ECA7FE}
{8F56C068-4827-412F-A29A-419B8AC5BECD} = {D7F8BC73-A6CB-4E07-984D-2D65B740BC69}
{0A9B7E03-680B-4BAC-9599-87AB5219D376} = {CB37F9AC-88CB-425C-8200-1B40F372F38D}
@@ -182,6 +192,7 @@ Global
{C1ACAB32-4100-4C19-AE08-57FA9BA75DF2} = {A85A3030-2878-4923-B450-9683832CDAC1}
{51463655-7668-4C7D-9FDE-D4D7CDAA82B8} = {77D857A8-45C6-4432-B4BF-A2F2C9ECA7FE}
{EA822D2F-88C2-4B82-AA20-DD07FF0A9A1E} = {D7F8BC73-A6CB-4E07-984D-2D65B740BC69}
+ {E6370DC6-B123-4233-B95F-2C505EA47BF5} = {1EAEB779-E7C8-4EF9-B9A9-22CB8E3C246D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C03BF138-4A5B-4261-9495-6D3AC6CE9779}