Synonym unit tests

Synonym unit tests

--- test/IBM.WatsonDeveloperCloud.Conversation.v1.UnitTests/ConversationUnitTests.cs
+++ test/IBM.WatsonDeveloperCloud.Conversation.v1.UnitTests/ConversationUnitTests.cs
@@ -2773,5 +2773,563 @@
             Assert.IsNotNull(result.Output);
         }
         #endregion
+
+        #region Synonyms
+        #region Create Synonym
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void CreateSynonym_No_WorkspaceId()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            CreateSynonym synonym = new CreateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            service.CreateSynonym(null, "entity", "value", synonym);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void CreateSynonym_No_Entity()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            CreateSynonym synonym = new CreateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            service.CreateSynonym("workspaceId", null, "value", synonym);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void CreateSynonym_No_Value()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            CreateSynonym synonym = new CreateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            service.CreateSynonym("workspaceId", "entity", null, synonym);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void CreateSynonym_No_Body()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.CreateSynonym("workspaceId", "entity", "value", null);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void CreateSynonym_No_VersionDate()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.VersionDate = null;
+
+            CreateSynonym synonym = new CreateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            service.CreateSynonym("workspaceId", "entity", "value", synonym);
+        }
+
+        [TestMethod, ExpectedException(typeof(AggregateException))]
+        public void CreateSynonym_Catch_Exception()
+        {
+            IClient client = CreateClient();
+
+            IRequest request = Substitute.For<IRequest>();
+            client.PostAsync(Arg.Any<string>())
+                 .Returns(x =>
+                 {
+                     throw new AggregateException(new ServiceResponseException(Substitute.For<IResponse>(),
+                                                                               Substitute.For<HttpResponseMessage>(HttpStatusCode.BadRequest),
+                                                                               string.Empty));
+                 });
+
+            CreateSynonym synonym = new CreateSynonym()
+            {
+                Synonym = "synonym"
+            };
+            ConversationService service = new ConversationService(client);
+            service.VersionDate = ConversationService.CONVERSATION_VERSION_DATE_2017_04_21;
+
+            service.CreateSynonym("workspaceId", "entity", "value", synonym);
+        }
+
+        [TestMethod]
+        public void CreateSynonym_Success()
+        {
+            IClient client = CreateClient();
+
+            IRequest request = Substitute.For<IRequest>();
+            client.PostAsync(Arg.Any<string>())
+                .Returns(request);
+
+            #region Response
+            SynonymResponse response = new SynonymResponse()
+            {
+                Created = DateTime.Now,
+                Updated = DateTime.Now,
+                Synonym = "synonym"
+            };
+            #endregion
+
+            CreateSynonym synonym = new CreateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            request.WithArgument(Arg.Any<string>(), Arg.Any<string>())
+                .Returns(request);
+            request.WithBody<CreateSynonym>(synonym)
+                .Returns(request);
+            request.As<SynonymResponse>()
+                .Returns(Task.FromResult(response));
+
+            ConversationService service = new ConversationService(client);
+            service.VersionDate = "versionDate";
+
+            var result = service.CreateSynonym("workspaceId", "entity", "value", synonym);
+
+            Assert.IsNotNull(result);
+            client.Received().PostAsync(Arg.Any<string>());
+            Assert.IsNotNull(result.Synonym);
+            Assert.IsTrue(result.Synonym == "synonym");
+            Assert.IsNotNull(result.Created);
+            Assert.IsNotNull(result.Updated);
+        }
+        #endregion
+
+        #region Delete Synonym
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void DeleteSynonym_No_WorkspaceId()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.DeleteSynonym(null, "entity", "value", "synonym");
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void DeleteSynonym_No_Entity()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.DeleteSynonym("workspaceId", null, "value", "synonym");
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void DeleteSynonym_No_Value()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.DeleteSynonym("workspaceId", "entity", null, "synonym");
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void DeleteSynonym_No_Synonym()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.DeleteSynonym("workspaceId", "entity", "value", null);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void DeleteSynonym_No_VersionDate()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.VersionDate = null;
+            service.DeleteSynonym("workspaceId", "entity", "value", "synonym");
+        }
+
+        [TestMethod, ExpectedException(typeof(AggregateException))]
+        public void DeleteSynonym_Catch_Exception()
+        {
+            IClient client = CreateClient();
+
+            IRequest request = Substitute.For<IRequest>();
+            client.DeleteAsync(Arg.Any<string>())
+                 .Returns(x =>
+                 {
+                     throw new AggregateException(new ServiceResponseException(Substitute.For<IResponse>(),
+                                                                               Substitute.For<HttpResponseMessage>(HttpStatusCode.BadRequest),
+                                                                               string.Empty));
+                 });
+
+            ConversationService service = new ConversationService(client);
+            service.VersionDate = ConversationService.CONVERSATION_VERSION_DATE_2017_04_21;
+
+            service.DeleteSynonym("workspaceId", "entity", "value", "synonym");
+        }
+
+        [TestMethod]
+        public void DeleteSynonym_Success()
+        {
+            IClient client = CreateClient();
+
+            IRequest request = Substitute.For<IRequest>();
+            client.DeleteAsync(Arg.Any<string>())
+                .Returns(request);
+
+            #region Response
+            object response = new object() { };
+            #endregion
+
+            request.WithArgument(Arg.Any<string>(), Arg.Any<string>())
+                .Returns(request);
+            request.As<object>()
+                .Returns(Task.FromResult(response));
+
+            ConversationService service = new ConversationService(client);
+            service.VersionDate = "versionDate";
+
+            var result = service.DeleteSynonym("workspaceId", "entity", "value", "synonym");
+
+            Assert.IsNotNull(result);
+            client.Received().DeleteAsync(Arg.Any<string>());
+        }
+        #endregion
+
+        #region Get Synonym
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void GetSynonym_No_WorkspaceId()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.GetSynonym(null, "entity", "value", "synonym");
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void GetSynonym_No_Entity()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.GetSynonym("workspaceId", null, "value", "synonym");
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void GetSynonym_No_Value()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.GetSynonym("workspaceId", "entity", null, "synonym");
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void GetSynonym_No_Synonym()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.GetSynonym("workspaceId", "entity", "value", null);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void GetSynonym_No_VersionDate()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.VersionDate = null;
+            service.GetSynonym("workspaceId", "entity", "value", "synonym");
+        }
+
+        [TestMethod, ExpectedException(typeof(AggregateException))]
+        public void GetSynonym_Catch_Exception()
+        {
+            IClient client = CreateClient();
+
+            IRequest request = Substitute.For<IRequest>();
+            client.GetAsync(Arg.Any<string>())
+                 .Returns(x =>
+                 {
+                     throw new AggregateException(new ServiceResponseException(Substitute.For<IResponse>(),
+                                                                               Substitute.For<HttpResponseMessage>(HttpStatusCode.BadRequest),
+                                                                               string.Empty));
+                 });
+
+            ConversationService service = new ConversationService(client);
+            service.VersionDate = ConversationService.CONVERSATION_VERSION_DATE_2017_04_21;
+            service.GetSynonym("workspaceId", "entity", "value", "synonym");
+        }
+
+        [TestMethod]
+        public void GetSynonym_Success()
+        {
+            IClient client = CreateClient();
+
+            IRequest request = Substitute.For<IRequest>();
+            client.GetAsync(Arg.Any<string>())
+                .Returns(request);
+
+            #region Response
+            SynonymResponse response = new SynonymResponse()
+            {
+                Created = DateTime.Now,
+                Updated = DateTime.Now,
+                Synonym = "synonym"
+            };
+            #endregion
+
+            request.WithArgument(Arg.Any<string>(), Arg.Any<string>())
+                .Returns(request);
+            request.As<SynonymResponse>()
+                .Returns(Task.FromResult(response));
+
+            ConversationService service = new ConversationService(client);
+            service.VersionDate = "versionDate";
+
+            var result = service.GetSynonym("workspaceId", "entity", "value", "synonym");
+
+            Assert.IsNotNull(result);
+            client.Received().GetAsync(Arg.Any<string>());
+            Assert.IsNotNull(result.Synonym);
+            Assert.IsTrue(result.Synonym == "synonym");
+            Assert.IsNotNull(result.Created);
+            Assert.IsNotNull(result.Updated);
+        }
+        #endregion
+
+        #region List Synonyms
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void ListSynonyms_No_WorkspaceId()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.ListSynonyms(null, "entity", "value");
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void ListSynonyms_No_Entity()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.ListSynonyms("workspaceId", null, "value");
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void ListSynonyms_No_Value()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.ListSynonyms("workspaceId", "entity", null);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void ListSynonyms_No_VersionDate()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.VersionDate = null;
+            service.ListSynonyms("workspaceId", "entity", "value");
+        }
+
+        [TestMethod, ExpectedException(typeof(AggregateException))]
+        public void ListSynonyms_Catch_Exception()
+        {
+            IClient client = CreateClient();
+
+            IRequest request = Substitute.For<IRequest>();
+            client.GetAsync(Arg.Any<string>())
+                 .Returns(x =>
+                 {
+                     throw new AggregateException(new ServiceResponseException(Substitute.For<IResponse>(),
+                                                                               Substitute.For<HttpResponseMessage>(HttpStatusCode.BadRequest),
+                                                                               string.Empty));
+                 });
+
+            ConversationService service = new ConversationService(client);
+            service.VersionDate = ConversationService.CONVERSATION_VERSION_DATE_2017_04_21;
+            service.ListSynonyms("workspaceId", "entity", "value");
+        }
+
+        [TestMethod]
+        public void ListSynonyms_Success()
+        {
+            IClient client = CreateClient();
+
+            IRequest request = Substitute.For<IRequest>();
+            client.GetAsync(Arg.Any<string>())
+                .Returns(request);
+
+            #region Response
+            SynonymCollectionResponse response = new SynonymCollectionResponse()
+            {
+                Synonyms = new List<SynonymResponse>()
+                {
+                    new SynonymResponse()
+                    {
+                        Synonym = "synonym",
+                        Created = DateTime.Now,
+                        Updated = DateTime.Now
+                    }
+                },
+                Pagination = new PaginationResponse()
+                {
+                    RefreshUrl = "refreshUrl",
+                    NextUrl = "nextUrl",
+                    Total = 1,
+                    Matched = 1
+                }
+            };
+            #endregion
+
+            request.WithArgument(Arg.Any<string>(), Arg.Any<string>())
+                .Returns(request);
+            request.WithArgument(Arg.Any<string>(), Arg.Any<string>())
+                .Returns(request);
+            request.WithArgument(Arg.Any<string>(), Arg.Any<int?>())
+                .Returns(request);
+            request.WithArgument(Arg.Any<string>(), Arg.Any<bool?>())
+                .Returns(request);
+            request.WithArgument(Arg.Any<string>(), Arg.Any<string>())
+                .Returns(request);
+            request.WithArgument(Arg.Any<string>(), Arg.Any<string>())
+                .Returns(request);
+            request.As<SynonymCollectionResponse>()
+                .Returns(Task.FromResult(response));
+
+            ConversationService service = new ConversationService(client);
+            service.VersionDate = "versionDate";
+
+            var result = service.ListSynonyms("workspaceId", "entity", "value");
+
+            Assert.IsNotNull(result);
+            client.Received().GetAsync(Arg.Any<string>());
+            Assert.IsNotNull(result.Synonyms);
+            Assert.IsTrue(result.Synonyms.Count > 0);
+            Assert.IsNotNull(result.Synonyms[0].Created);
+            Assert.IsNotNull(result.Synonyms[0].Updated);
+            Assert.IsTrue(!string.IsNullOrEmpty(result.Synonyms[0].Synonym));
+            Assert.IsTrue(result.Synonyms[0].Synonym == "synonym");
+            Assert.IsTrue(result.Pagination.RefreshUrl == "refreshUrl");
+            Assert.IsTrue(result.Pagination.NextUrl == "nextUrl");
+            Assert.IsTrue(result.Pagination.Total == 1);
+            Assert.IsTrue(result.Pagination.Matched == 1);
+        }
+        #endregion
+
+        #region Update Synonym
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void UpdateSynonym_No_WorkspaceId()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            UpdateSynonym synonym = new UpdateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            service.UpdateSynonym(null, "entity", "value", "synonym", synonym);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void UpdateSynonym_No_Entity()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            UpdateSynonym synonym = new UpdateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            service.UpdateSynonym("workspaceId", null, "value", "synonym", synonym);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void UpdateSynonym_No_Value()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            UpdateSynonym synonym = new UpdateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            service.UpdateSynonym("workspaceId", "entity", null, "synonym", synonym);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void UpdateSynonym_No_Synonym()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            UpdateSynonym synonym = new UpdateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            service.UpdateSynonym("workspaceId", "entity", "value", null, synonym);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void UpdateSynonym_No_Body()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.UpdateSynonym("workspaceId", "entity", "value", "synonym", null);
+        }
+
+        [TestMethod, ExpectedException(typeof(ArgumentNullException))]
+        public void UpdateSynonym_No_VersionDate()
+        {
+            ConversationService service = new ConversationService("username", "password", "versionDate");
+            service.VersionDate = null;
+
+            UpdateSynonym synonym = new UpdateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            service.UpdateSynonym("workspaceId", "entity", "value", "synonym", synonym);
+        }
+
+        [TestMethod, ExpectedException(typeof(AggregateException))]
+        public void UpdateSynonym_Catch_Exception()
+        {
+            IClient client = CreateClient();
+
+            IRequest request = Substitute.For<IRequest>();
+            client.PostAsync(Arg.Any<string>())
+                 .Returns(x =>
+                 {
+                     throw new AggregateException(new ServiceResponseException(Substitute.For<IResponse>(),
+                                                                               Substitute.For<HttpResponseMessage>(HttpStatusCode.BadRequest),
+                                                                               string.Empty));
+                 });
+
+            UpdateSynonym synonym = new UpdateSynonym()
+            {
+                Synonym = "synonym"
+            };
+            ConversationService service = new ConversationService(client);
+            service.VersionDate = ConversationService.CONVERSATION_VERSION_DATE_2017_04_21;
+
+            service.UpdateSynonym("workspaceId", "entity", "value", "synonym", synonym);
+        }
+
+        [TestMethod]
+        public void UpdateSynonym_Success()
+        {
+            IClient client = CreateClient();
+
+            IRequest request = Substitute.For<IRequest>();
+            client.PostAsync(Arg.Any<string>())
+                .Returns(request);
+
+            #region Response
+            SynonymResponse response = new SynonymResponse()
+            {
+                Created = DateTime.Now,
+                Updated = DateTime.Now,
+                Synonym = "synonym"
+            };
+            #endregion
+
+            UpdateSynonym synonym = new UpdateSynonym()
+            {
+                Synonym = "synonym"
+            };
+
+            request.WithArgument(Arg.Any<string>(), Arg.Any<string>())
+                .Returns(request);
+            request.WithBody<UpdateSynonym>(synonym)
+                .Returns(request);
+            request.As<SynonymResponse>()
+                .Returns(Task.FromResult(response));
+
+            ConversationService service = new ConversationService(client);
+            service.VersionDate = "versionDate";
+
+            var result = service.UpdateSynonym("workspaceId", "entity", "value", "synonym", synonym);
+
+            Assert.IsNotNull(result);
+            client.Received().PostAsync(Arg.Any<string>());
+            Assert.IsNotNull(result.Created);
+            Assert.IsNotNull(result.Updated);
+            Assert.IsTrue(result.Synonym == "synonym");
+        }
+        #endregion
+        #endregion
     }
 }


Delete 20160423195050_RenamingActivityToEvent.cs

--- AllReadyApp/Web-App/AllReady/Migrations/20160423195050_RenamingActivityToEvent.cs
+++ AllReadyApp/Web-App/AllReady/Migrations/20160423195050_RenamingActivityToEvent.cs
@@ -1,461 +0,0 @@
-using System;
-using Microsoft.Data.Entity.Migrations;
-using Microsoft.Data.Entity.Metadata;
-
-namespace AllReady.Migrations
-{
-    public partial class RenamingActivityToEvent : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(name: "FK_AllReadyTask_Activity_ActivityId", table: "AllReadyTask");
-            migrationBuilder.DropForeignKey(name: "FK_Campaign_Organization_ManagingOrganizationId", table: "Campaign");
-            migrationBuilder.DropForeignKey(name: "FK_CampaignContact_Campaign_CampaignId", table: "CampaignContact");
-            migrationBuilder.DropForeignKey(name: "FK_CampaignContact_Contact_ContactId", table: "CampaignContact");
-            migrationBuilder.DropForeignKey(name: "FK_OrganizationContact_Contact_ContactId", table: "OrganizationContact");
-            migrationBuilder.DropForeignKey(name: "FK_OrganizationContact_Organization_OrganizationId", table: "OrganizationContact");
-            migrationBuilder.DropForeignKey(name: "FK_TaskSkill_Skill_SkillId", table: "TaskSkill");
-            migrationBuilder.DropForeignKey(name: "FK_TaskSkill_AllReadyTask_TaskId", table: "TaskSkill");
-            migrationBuilder.DropForeignKey(name: "FK_UserSkill_Skill_SkillId", table: "UserSkill");
-            migrationBuilder.DropForeignKey(name: "FK_UserSkill_ApplicationUser_UserId", table: "UserSkill");
-            migrationBuilder.DropForeignKey(name: "FK_IdentityRoleClaim<string>_IdentityRole_RoleId", table: "AspNetRoleClaims");
-            migrationBuilder.DropForeignKey(name: "FK_IdentityUserClaim<string>_ApplicationUser_UserId", table: "AspNetUserClaims");
-            migrationBuilder.DropForeignKey(name: "FK_IdentityUserLogin<string>_ApplicationUser_UserId", table: "AspNetUserLogins");
-            migrationBuilder.DropForeignKey(name: "FK_IdentityUserRole<string>_IdentityRole_RoleId", table: "AspNetUserRoles");
-            migrationBuilder.DropForeignKey(name: "FK_IdentityUserRole<string>_ApplicationUser_UserId", table: "AspNetUserRoles");
-            migrationBuilder.DropColumn(name: "ActivityId", table: "AllReadyTask");
-            migrationBuilder.DropTable("ActivitySignup");
-            migrationBuilder.DropTable("ActivitySkill");
-            migrationBuilder.DropTable("Activity");
-            migrationBuilder.CreateTable(
-                name: "Event",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
-                    CampaignId = table.Column<int>(nullable: false),
-                    Description = table.Column<string>(nullable: true),
-                    EndDateTime = table.Column<DateTimeOffset>(nullable: false),
-                    EventType = table.Column<int>(nullable: false),
-                    ImageUrl = table.Column<string>(nullable: true),
-                    IsAllowWaitList = table.Column<bool>(nullable: false),
-                    IsLimitVolunteers = table.Column<bool>(nullable: false),
-                    LocationId = table.Column<int>(nullable: true),
-                    Name = table.Column<string>(nullable: false),
-                    NumberOfVolunteersRequired = table.Column<int>(nullable: false),
-                    OrganizerId = table.Column<string>(nullable: true),
-                    StartDateTime = table.Column<DateTimeOffset>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Event", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Event_Campaign_CampaignId",
-                        column: x => x.CampaignId,
-                        principalTable: "Campaign",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_Event_Location_LocationId",
-                        column: x => x.LocationId,
-                        principalTable: "Location",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "FK_Event_ApplicationUser_OrganizerId",
-                        column: x => x.OrganizerId,
-                        principalTable: "AspNetUsers",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-            migrationBuilder.CreateTable(
-                name: "EventSignup",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
-                    AdditionalInfo = table.Column<string>(nullable: true),
-                    CheckinDateTime = table.Column<DateTime>(nullable: true),
-                    EventId = table.Column<int>(nullable: true),
-                    PreferredEmail = table.Column<string>(nullable: true),
-                    PreferredPhoneNumber = table.Column<string>(nullable: true),
-                    SignupDateTime = table.Column<DateTime>(nullable: false),
-                    UserId = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_EventSignup", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_EventSignup_Event_EventId",
-                        column: x => x.EventId,
-                        principalTable: "Event",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "FK_EventSignup_ApplicationUser_UserId",
-                        column: x => x.UserId,
-                        principalTable: "AspNetUsers",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-            migrationBuilder.CreateTable(
-                name: "EventSkill",
-                columns: table => new
-                {
-                    EventId = table.Column<int>(nullable: false),
-                    SkillId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_EventSkill", x => new { x.EventId, x.SkillId });
-                    table.ForeignKey(
-                        name: "FK_EventSkill_Event_EventId",
-                        column: x => x.EventId,
-                        principalTable: "Event",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_EventSkill_Skill_SkillId",
-                        column: x => x.SkillId,
-                        principalTable: "Skill",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-            migrationBuilder.AddColumn<int>(
-                name: "EventId",
-                table: "AllReadyTask",
-                nullable: true);
-            migrationBuilder.AddForeignKey(
-                name: "FK_AllReadyTask_Event_EventId",
-                table: "AllReadyTask",
-                column: "EventId",
-                principalTable: "Event",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_Campaign_Organization_ManagingOrganizationId",
-                table: "Campaign",
-                column: "ManagingOrganizationId",
-                principalTable: "Organization",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_CampaignContact_Campaign_CampaignId",
-                table: "CampaignContact",
-                column: "CampaignId",
-                principalTable: "Campaign",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_CampaignContact_Contact_ContactId",
-                table: "CampaignContact",
-                column: "ContactId",
-                principalTable: "Contact",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_OrganizationContact_Contact_ContactId",
-                table: "OrganizationContact",
-                column: "ContactId",
-                principalTable: "Contact",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_OrganizationContact_Organization_OrganizationId",
-                table: "OrganizationContact",
-                column: "OrganizationId",
-                principalTable: "Organization",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_TaskSkill_Skill_SkillId",
-                table: "TaskSkill",
-                column: "SkillId",
-                principalTable: "Skill",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_TaskSkill_AllReadyTask_TaskId",
-                table: "TaskSkill",
-                column: "TaskId",
-                principalTable: "AllReadyTask",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_UserSkill_Skill_SkillId",
-                table: "UserSkill",
-                column: "SkillId",
-                principalTable: "Skill",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_UserSkill_ApplicationUser_UserId",
-                table: "UserSkill",
-                column: "UserId",
-                principalTable: "AspNetUsers",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_IdentityRoleClaim<string>_IdentityRole_RoleId",
-                table: "AspNetRoleClaims",
-                column: "RoleId",
-                principalTable: "AspNetRoles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_IdentityUserClaim<string>_ApplicationUser_UserId",
-                table: "AspNetUserClaims",
-                column: "UserId",
-                principalTable: "AspNetUsers",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_IdentityUserLogin<string>_ApplicationUser_UserId",
-                table: "AspNetUserLogins",
-                column: "UserId",
-                principalTable: "AspNetUsers",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_IdentityUserRole<string>_IdentityRole_RoleId",
-                table: "AspNetUserRoles",
-                column: "RoleId",
-                principalTable: "AspNetRoles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-            migrationBuilder.AddForeignKey(
-                name: "FK_IdentityUserRole<string>_ApplicationUser_UserId",
-                table: "AspNetUserRoles",
-                column: "UserId",
-                principalTable: "AspNetUsers",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Cascade);
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropForeignKey(name: "FK_AllReadyTask_Event_EventId", table: "AllReadyTask");
-            migrationBuilder.DropForeignKey(name: "FK_Campaign_Organization_ManagingOrganizationId", table: "Campaign");
-            migrationBuilder.DropForeignKey(name: "FK_CampaignContact_Campaign_CampaignId", table: "CampaignContact");
-            migrationBuilder.DropForeignKey(name: "FK_CampaignContact_Contact_ContactId", table: "CampaignContact");
-            migrationBuilder.DropForeignKey(name: "FK_OrganizationContact_Contact_ContactId", table: "OrganizationContact");
-            migrationBuilder.DropForeignKey(name: "FK_OrganizationContact_Organization_OrganizationId", table: "OrganizationContact");
-            migrationBuilder.DropForeignKey(name: "FK_TaskSkill_Skill_SkillId", table: "TaskSkill");
-            migrationBuilder.DropForeignKey(name: "FK_TaskSkill_AllReadyTask_TaskId", table: "TaskSkill");
-            migrationBuilder.DropForeignKey(name: "FK_UserSkill_Skill_SkillId", table: "UserSkill");
-            migrationBuilder.DropForeignKey(name: "FK_UserSkill_ApplicationUser_UserId", table: "UserSkill");
-            migrationBuilder.DropForeignKey(name: "FK_IdentityRoleClaim<string>_IdentityRole_RoleId", table: "AspNetRoleClaims");
-            migrationBuilder.DropForeignKey(name: "FK_IdentityUserClaim<string>_ApplicationUser_UserId", table: "AspNetUserClaims");
-            migrationBuilder.DropForeignKey(name: "FK_IdentityUserLogin<string>_ApplicationUser_UserId", table: "AspNetUserLogins");
-            migrationBuilder.DropForeignKey(name: "FK_IdentityUserRole<string>_IdentityRole_RoleId", table: "AspNetUserRoles");
-            migrationBuilder.DropForeignKey(name: "FK_IdentityUserRole<string>_ApplicationUser_UserId", table: "AspNetUserRoles");
-            migrationBuilder.DropColumn(name: "EventId", table: "AllReadyTask");
-            migrationBuilder.DropTable("EventSignup");
-            migrationBuilder.DropTable("EventSkill");
-            migrationBuilder.DropTable("Event");
-            migrationBuilder.CreateTable(
-                name: "Activity",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
-                    CampaignId = table.Column<int>(nullable: false),
-                    Description = table.Column<string>(nullable: true),
-                    EndDateTime = table.Column<DateTimeOffset>(nullable: false),
-                    EventType = table.Column<int>(nullable: false),
-                    ImageUrl = table.Column<string>(nullable: true),
-                    IsAllowWaitList = table.Column<bool>(nullable: false),
-                    IsLimitVolunteers = table.Column<bool>(nullable: false),
-                    LocationId = table.Column<int>(nullable: true),
-                    Name = table.Column<string>(nullable: false),
-                    NumberOfVolunteersRequired = table.Column<int>(nullable: false),
-                    OrganizerId = table.Column<string>(nullable: true),
-                    StartDateTime = table.Column<DateTimeOffset>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Activity", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Activity_Campaign_CampaignId",
-                        column: x => x.CampaignId,
-                        principalTable: "Campaign",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "FK_Activity_Location_LocationId",
-                        column: x => x.LocationId,
-                        principalTable: "Location",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "FK_Activity_ApplicationUser_OrganizerId",
-                        column: x => x.OrganizerId,
-                        principalTable: "AspNetUsers",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-            migrationBuilder.CreateTable(
-                name: "ActivitySignup",
-                columns: table => new
-                {
-                    Id = table.Column<int>(nullable: false)
-                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
-                    ActivityId = table.Column<int>(nullable: true),
-                    AdditionalInfo = table.Column<string>(nullable: true),
-                    CheckinDateTime = table.Column<DateTime>(nullable: true),
-                    PreferredEmail = table.Column<string>(nullable: true),
-                    PreferredPhoneNumber = table.Column<string>(nullable: true),
-                    SignupDateTime = table.Column<DateTime>(nullable: false),
-                    UserId = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_ActivitySignup", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_ActivitySignup_Activity_ActivityId",
-                        column: x => x.ActivityId,
-                        principalTable: "Activity",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "FK_ActivitySignup_ApplicationUser_UserId",
-                        column: x => x.UserId,
-                        principalTable: "AspNetUsers",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-            migrationBuilder.CreateTable(
-                name: "ActivitySkill",
-                columns: table => new
-                {
-                    ActivityId = table.Column<int>(nullable: false),
-                    SkillId = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_ActivitySkill", x => new { x.ActivityId, x.SkillId });
-                    table.ForeignKey(
-                        name: "FK_ActivitySkill_Activity_ActivityId",
-                        column: x => x.ActivityId,
-                        principalTable: "Activity",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "FK_ActivitySkill_Skill_SkillId",
-                        column: x => x.SkillId,
-                        principalTable: "Skill",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-            migrationBuilder.AddColumn<int>(
-                name: "ActivityId",
-                table: "AllReadyTask",
-                nullable: true);
-            migrationBuilder.AddForeignKey(
-                name: "FK_AllReadyTask_Activity_ActivityId",
-                table: "AllReadyTask",
-                column: "ActivityId",
-                principalTable: "Activity",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_Campaign_Organization_ManagingOrganizationId",
-                table: "Campaign",
-                column: "ManagingOrganizationId",
-                principalTable: "Organization",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_CampaignContact_Campaign_CampaignId",
-                table: "CampaignContact",
-                column: "CampaignId",
-                principalTable: "Campaign",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_CampaignContact_Contact_ContactId",
-                table: "CampaignContact",
-                column: "ContactId",
-                principalTable: "Contact",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_OrganizationContact_Contact_ContactId",
-                table: "OrganizationContact",
-                column: "ContactId",
-                principalTable: "Contact",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_OrganizationContact_Organization_OrganizationId",
-                table: "OrganizationContact",
-                column: "OrganizationId",
-                principalTable: "Organization",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_TaskSkill_Skill_SkillId",
-                table: "TaskSkill",
-                column: "SkillId",
-                principalTable: "Skill",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_TaskSkill_AllReadyTask_TaskId",
-                table: "TaskSkill",
-                column: "TaskId",
-                principalTable: "AllReadyTask",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_UserSkill_Skill_SkillId",
-                table: "UserSkill",
-                column: "SkillId",
-                principalTable: "Skill",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_UserSkill_ApplicationUser_UserId",
-                table: "UserSkill",
-                column: "UserId",
-                principalTable: "AspNetUsers",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_IdentityRoleClaim<string>_IdentityRole_RoleId",
-                table: "AspNetRoleClaims",
-                column: "RoleId",
-                principalTable: "AspNetRoles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_IdentityUserClaim<string>_ApplicationUser_UserId",
-                table: "AspNetUserClaims",
-                column: "UserId",
-                principalTable: "AspNetUsers",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_IdentityUserLogin<string>_ApplicationUser_UserId",
-                table: "AspNetUserLogins",
-                column: "UserId",
-                principalTable: "AspNetUsers",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_IdentityUserRole<string>_IdentityRole_RoleId",
-                table: "AspNetUserRoles",
-                column: "RoleId",
-                principalTable: "AspNetRoles",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-            migrationBuilder.AddForeignKey(
-                name: "FK_IdentityUserRole<string>_ApplicationUser_UserId",
-                table: "AspNetUserRoles",
-                column: "UserId",
-                principalTable: "AspNetUsers",
-                principalColumn: "Id",
-                onDelete: ReferentialAction.Restrict);
-        }
-    }
-}


Fix mesh issue reported from testing having just one world anchor on the parent of the spatial understanding meshes resulted in awkward geometry on the seams between meshes.

--- Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingCustomMesh.cs
+++ Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingCustomMesh.cs
@@ -157,10 +157,10 @@
         private void Start()
         {
             spatialUnderstanding = SpatialUnderstanding.Instance;
-            if (GetComponent<WorldAnchor>() == null)
-            {
-                gameObject.AddComponent<WorldAnchor>();
-            }
+            //if (GetComponent<WorldAnchor>() == null)
+            //{
+            //    gameObject.AddComponent<WorldAnchor>();
+            //}
         }

         private void Update()
@@ -270,7 +270,7 @@
                     // be rare).
                     if (SurfaceObjects.Count <= meshSectorsIndex)
                     {
-                        AddSurfaceObject(null, string.Format("SurfaceUnderstanding Mesh-{0}", meshSectorsIndex), transform);
+                        AddSurfaceObject(null, string.Format("SurfaceUnderstanding Mesh-{0}", meshSectorsIndex), transform).AddComponent<WorldAnchor>()
                     }

                     // Get the next MeshData.


YoumuSlash: Better camera looping algorithm

--- Assets/Microgames/_Bosses/YoumuSlash/Scripts/YoumuSlash3DEnvironmentController.cs
+++ Assets/Microgames/_Bosses/YoumuSlash/Scripts/YoumuSlash3DEnvironmentController.cs
@@ -4,8 +4,6 @@

 public class YoumuSlash3DEnvironmentController : MonoBehaviour
 {
-    [SerializeField]
-    private Transform stairParent;
     [SerializeField]
     private GameObject stairObject;
     [SerializeField]
@@ -16,28 +14,22 @@
     [SerializeField]
     private float cameraDollySpeed;

-    private int unitsTravelled;
-
     Vector3 StairOffset3D => new Vector3(0f, stairOffset.y, stairOffset.x);

-	void Start ()
-    {
-        for (int i = 0; i < stairParent.childCount; i++)
-        {
-            stairParent.GetChild(i).localPosition = StairOffset3D * i;
-        }
-        unitsTravelled = 1;
-	}
+	//void Start ()
+ //   {
+ //       for (int i = 0; i < stairParent.childCount; i++)
+ //       {
+ //           stairParent.GetChild(i).localPosition = StairOffset3D * i;
+ //       }
+	//}

 	void Update ()
     {
         cameraParent.position += StairOffset3D.resize(cameraDollySpeed * Time.deltaTime);
-        if (cameraParent.localPosition.y > stairOffset.y * unitsTravelled)
+        if (cameraParent.localPosition.y > stairOffset.y)
         {
-            Transform lowestStair = stairParent.GetChild(0);
-            lowestStair.SetSiblingIndex(stairParent.childCount - 1);
-            lowestStair.localPosition += StairOffset3D * stairParent.childCount;
-            unitsTravelled++;
+            cameraParent.localPosition -= StairOffset3D;
         }
 	}
 }


add note for Nier

add note for Nier

--- CompatBot/Utils/ResultFormatters/LogParserResultFormatter.WeirdSettingsSection.cs
+++ CompatBot/Utils/ResultFormatters/LogParserResultFormatter.WeirdSettingsSection.cs
@@ -33,6 +33,12 @@
                 if (dimensions.Length > 1 && int.TryParse(dimensions[1], out var height) && height < 720)
                     notes.Add("⚠ `Resolution` below 720p will not improve performance");
             }
+            var serial = items["serial"];
+            if (items["frame_limit"] is string frameLimit
+                && (serial == "BLUS30481" || serial == "BLES00826" || serial == "BLJM60223")
+                && frameLimit != "30")
+                notes.Add("⚠ Please set `Framerate Limiter` to 30 fps");
+
             if (items["hook_static_functions"] is string hookStaticFunctions && hookStaticFunctions == EnabledMark)
                 notes.Add("⚠ `Hook Static Functions` is enabled, please disable");
             if (items["host_root"] is string hostRoot && hostRoot == EnabledMark)
@@ -53,7 +59,7 @@
             if (items["async_shaders"] == EnabledMark)
                 notes.Add("❔ `Async Shader Compiler` is disabled");
             if (items["vertex_cache"] == EnabledMark
-                && items["serial"] is string serial
+                && !string.IsNullOrEmpty(serial)
                 && !KnownDisableVertexCacheIds.Contains(serial))
                 notes.Add("⚠ `Vertex Cache` is disabled, please re-enable");
             if (items["cpu_blit"] is string cpuBlit && cpuBlit == EnabledMark &&


Fix medibot exception (#12336)

Fix medibot exception (#12336)

--- Content.Server/NPC/HTN/PrimitiveTasks/Operators/Specific/MedibotInjectOperator.cs
+++ Content.Server/NPC/HTN/PrimitiveTasks/Operators/Specific/MedibotInjectOperator.cs
@@ -44,7 +44,7 @@
         // TODO: Wat
         var owner = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner);

-        if (!blackboard.TryGetValue<EntityUid>(TargetKey, out var target))
+        if (!blackboard.TryGetValue<EntityUid>(TargetKey, out var target) || _entManager.Deleted(target))
             return HTNOperatorStatus.Failed;

         if (!_entManager.TryGetComponent<MedibotComponent>(owner, out var botComp))


Added null cheks for some of the web settings so that settings not provided in the provisioning template does not override existing settings on the web. This also supports clearing out the settings if it is left empty in the template.

--- Core/OfficeDevPnP.Core/Framework/Provisioning/ObjectHandlers/ObjectWebSettings.cs
+++ Core/OfficeDevPnP.Core/Framework/Provisioning/ObjectHandlers/ObjectWebSettings.cs
@@ -229,19 +229,28 @@
                     {
                         web.CustomMasterUrl = customMasterUrl;
                     }
-                    if (!string.IsNullOrEmpty(parser.ParseString(webSettings.Title)))
+                    if (webSettings.Title != null)
                     {
                         web.Title = parser.ParseString(webSettings.Title);
                     }
-                    web.Description = parser.ParseString(webSettings.Description);
-                    web.SiteLogoUrl = parser.ParseString(webSettings.SiteLogo);
+                    if (webSettings.Description != null)
+                    {
+                        web.Description = parser.ParseString(webSettings.Description);
+                    }
+                    if (webSettings.SiteLogo != null)
+                    {
+                        web.SiteLogoUrl = parser.ParseString(webSettings.SiteLogo);
+                    }
                     var welcomePage = parser.ParseString(webSettings.WelcomePage);
                     if (!string.IsNullOrEmpty(welcomePage))
                     {
                         web.RootFolder.WelcomePage = welcomePage;
                         web.RootFolder.Update();
                     }
-                    web.AlternateCssUrl = parser.ParseString(webSettings.AlternateCSS);
+                    if (webSettings.AlternateCSS != null)
+                    {
+                        web.AlternateCssUrl = parser.ParseString(webSettings.AlternateCSS);
+                    }

                     web.Update();
                     web.Context.ExecuteQueryRetry();


finally got around to finishing the tiled importer unit tests

--- Source/MonoGame.Extended.Content.Pipeline.Tests/TiledMapImporterProcessorTests.cs
+++ Source/MonoGame.Extended.Content.Pipeline.Tests/TiledMapImporterProcessorTests.cs
@@ -27,6 +27,7 @@
             Assert.AreEqual("awesome", map.Properties[0].Name);
             Assert.AreEqual("42", map.Properties[0].Value);
             Assert.AreEqual(1, map.Tilesets.Count);
+            Assert.AreEqual(3, map.Layers.Count);

             var tileset = map.Tilesets.First();
             Assert.AreEqual(1, tileset.FirstGid);
@@ -43,7 +44,34 @@
             Assert.AreEqual(128, tileset.TileWidth);
             Assert.AreEqual(0, tileset.TileOffset.X);
             Assert.AreEqual(0, tileset.TileOffset.Y);
-        }
+
+            var tileLayer2 = (TmxTileLayer) map.Layers[0];
+            Assert.AreEqual("Tile Layer 2", tileLayer2.Name);
+            Assert.AreEqual(1, tileLayer2.Opacity);
+            Assert.AreEqual(0, tileLayer2.Properties.Count);
+            Assert.AreEqual(true, tileLayer2.Visible);
+            Assert.AreEqual(200, tileLayer2.Data.Tiles.Count);
+            Assert.AreEqual(0, tileLayer2.X);
+            Assert.AreEqual(0, tileLayer2.Y);
+
+            var imageLayer = (TmxImageLayer)map.Layers[1];
+            Assert.AreEqual("Image Layer 1", imageLayer.Name);
+            Assert.AreEqual(1, imageLayer.Opacity);
+            Assert.AreEqual(0, imageLayer.Properties.Count);
+            Assert.AreEqual(true, imageLayer.Visible);
+            Assert.AreEqual("hills.png", imageLayer.Image.Source);
+            Assert.AreEqual(100, imageLayer.X);
+            Assert.AreEqual(100, imageLayer.Y);
+
+            var tileLayer1 = (TmxTileLayer)map.Layers[2];
+            Assert.AreEqual("Tile Layer 1", tileLayer1.Name);
+            Assert.AreEqual(2, tileLayer1.Properties.Count);
+
+            Assert.AreEqual("customlayerprop", tileLayer1.Properties[0].Name);
+            Assert.AreEqual("1", tileLayer1.Properties[0].Value);
+
+            Assert.AreEqual("customlayerprop2", tileLayer1.Properties[1].Name);
+            Assert.AreEqual("2", tileLayer1.Properties[1].Value);}

         [Test]
         public void TiledMapImporter_Xml_Test()


Copied some methods to a new name and obsoleted the old with EnrichWith --> EnrichAllWith and OnCreation --> OnCreationForAll()

--- Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
+++ Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
@@ -120,6 +120,16 @@
             return TheDefault.Is.ConstructedBy(func);
         }

+        /// <summary>
+        /// Shorthand to say TheDefault.Is.ConstructedBy(func)
+        /// </summary>
+        /// <param name="func"></param>
+        /// <returns></returns>
+        public LambdaInstance<PLUGINTYPE> Use(Func<PLUGINTYPE> func)
+        {
+            return TheDefault.Is.ConstructedBy(func);
+        }
+
         public void Use(Instance instance)
         {
             TheDefault.IsThis(instance);
@@ -187,6 +197,7 @@
         /// </summary>
         /// <param name="handler"></param>
         /// <returns></returns>
+        [Obsolete("Change to OnCreationForAll")]
         public CreatePluginFamilyExpression<PLUGINTYPE> OnCreation(Action<PLUGINTYPE> handler)
         {
             _children.Add(
@@ -210,6 +221,36 @@
             return this;
         }

+
+        /// <summary>
+        /// Register an Action to run against any object of this PluginType immediately after
+        /// it is created, but before the new object is passed back to the caller
+        /// </summary>
+        /// <param name="handler"></param>
+        /// <returns></returns>
+        public CreatePluginFamilyExpression<PLUGINTYPE> OnCreationForAll(Action<PLUGINTYPE> handler)
+        {
+            _children.Add(
+                graph =>
+                {
+                    Func<object, object> function = target =>
+                    {
+                        handler((PLUGINTYPE)target);
+                        return target;
+                    };
+
+                    var interceptor = new PluginTypeInterceptor(typeof(PLUGINTYPE), (c, o) =>
+                    {
+                        handler((PLUGINTYPE)o);
+                        return o;
+                    });
+
+                    graph.InterceptorLibrary.AddInterceptor(interceptor);
+                });
+
+            return this;
+        }
+
         /// <summary>
         /// Adds an Interceptor to only this PluginType
         /// </summary>
@@ -234,6 +275,7 @@
         /// </summary>
         /// <param name="handler"></param>
         /// <returns></returns>
+        [Obsolete("Change to OnCreationForAll")]
         public CreatePluginFamilyExpression<PLUGINTYPE> OnCreation(Action<IContext, PLUGINTYPE> handler)
         {
             _children.Add(
@@ -253,6 +295,32 @@
             return this;
         }

+
+        /// <summary>
+        /// Register an Action to run against any object of this PluginType immediately after
+        /// it is created, but before the new object is passed back to the caller
+        /// </summary>
+        /// <param name="handler"></param>
+        /// <returns></returns>
+        public CreatePluginFamilyExpression<PLUGINTYPE> OnCreationForAll(Action<IContext, PLUGINTYPE> handler)
+        {
+            _children.Add(
+                graph =>
+                {
+                    Func<IContext, object, object> function = (c, o) =>
+                    {
+                        handler(c, (PLUGINTYPE)o);
+                        return o;
+                    };
+
+                    var interceptor = new PluginTypeInterceptor(typeof(PLUGINTYPE), function);
+
+                    graph.InterceptorLibrary.AddInterceptor(interceptor);
+                });
+
+            return this;
+        }
+
         /// <summary>
         /// Register a Func to run against any object of this PluginType immediately after it is created,
         /// but before the new object is passed back to the caller.  Unlike <see cref="OnCreation(Action{PLUGINTYPE})">OnCreation()</see>,
@@ -261,6 +329,7 @@
         /// </summary>
         /// <param name="handler"></param>
         /// <returns></returns>
+        [Obsolete("Change to EnrichAllWith() -- eliminates confusion")]
         public CreatePluginFamilyExpression<PLUGINTYPE> EnrichWith(EnrichmentHandler<PLUGINTYPE> handler)
         {
             _children.Add(
@@ -269,6 +338,28 @@
                     Func<IContext, object, object> function = (context, target) => handler((PLUGINTYPE) target);

                     var interceptor = new PluginTypeInterceptor(typeof (PLUGINTYPE), function);
+                    graph.InterceptorLibrary.AddInterceptor(interceptor);
+                });
+
+            return this;
+        }
+
+        /// <summary>
+        /// Register a Func to run against any object of this PluginType immediately after it is created,
+        /// but before the new object is passed back to the caller.  Unlike <see cref="OnCreation(Action{PLUGINTYPE})">OnCreation()</see>,
+        /// EnrichWith() gives the the ability to return a different object.  Use this method for runtime AOP
+        /// scenarios or to return a decorator.
+        /// </summary>
+        /// <param name="handler"></param>
+        /// <returns></returns>
+        public CreatePluginFamilyExpression<PLUGINTYPE> EnrichAllWith(EnrichmentHandler<PLUGINTYPE> handler)
+        {
+            _children.Add(
+                graph =>
+                {
+                    Func<IContext, object, object> function = (context, target) => handler((PLUGINTYPE)target);
+
+                    var interceptor = new PluginTypeInterceptor(typeof(PLUGINTYPE), function);
                     graph.InterceptorLibrary.AddInterceptor(interceptor);
                 });

@@ -283,6 +374,7 @@
         /// </summary>
         /// <param name="handler"></param>
         /// <returns></returns>
+        [Obsolete("Change to EnrichAllWith -- it's to avoid confusion")]
         public CreatePluginFamilyExpression<PLUGINTYPE> EnrichWith(ContextEnrichmentHandler<PLUGINTYPE> handler)
         {
             _children.Add(
@@ -295,6 +387,29 @@

             return this;
         }
+
+
+        /// <summary>
+        /// Register a Func to run against any object of this PluginType immediately after it is created,
+        /// but before the new object is passed back to the caller.  Unlike <see cref="OnCreation(Action{IContext,PLUGINTYPE})">OnCreation()</see>,
+        /// EnrichWith() gives the the ability to return a different object.  Use this method for runtime AOP
+        /// scenarios or to return a decorator.
+        /// </summary>
+        /// <param name="handler"></param>
+        /// <returns></returns>
+        public CreatePluginFamilyExpression<PLUGINTYPE> EnrichAllWith(ContextEnrichmentHandler<PLUGINTYPE> handler)
+        {
+            _children.Add(
+                graph =>
+                {
+                    var interceptor = new PluginTypeInterceptor(typeof(PLUGINTYPE),
+                                                                (c, o) => handler(c, (PLUGINTYPE)o));
+                    graph.InterceptorLibrary.AddInterceptor(interceptor);
+                });
+
+            return this;
+        }
+

         /// <summary>
         /// Shortcut method to add an additional Instance to this Plugin Type


1.0.04

--- LN.cs
+++ LN.cs
@@ -10613,9 +10613,9 @@
 			case 41:
 				result += "애처럼 굴지좀 말아요! 난 더한것도 봤어요.";
 			case 42:
-				result += "그건 꿰메야 겠는데요!";
+				result += "그건 꿰매야 겠는데요!";
 			case 43:
-				result += "또 그 나쁜 무리랑 어울렸나요?";
+				result += "또 그 나쁜 놈들이랑 어울렸나요?";
 			case 44:
 				result += "잠시만요, 뽀로로 반창고좀 찾아 올게요...";
 			case 45:
@@ -10894,7 +10894,7 @@
 			case 178:
 				result += "살아남고 싶다면, 무기와 집을 만드는것이 좋아요. 나무를 베어 원목을 모으는 것부터 시작하세요.";
 			case 179:
-				result += "키보드에서 " + Main.cInv + " 를 눌러 조합창에 들어가봐요. 나무가 충분하다면, 작업대를 만들어요. 작업대에서 가까이에만 있다면 더 복잡한것도 만들 수 있어요.";
+				result += "키보드에서 [" + Main.cInv + "] 를 눌러 조합창에 들어가봐요. 나무가 충분하다면, 작업대를 만들어요. 작업대에서 가까이에만 있다면 더 복잡한것도 만들 수 있어요.";
 			case 180:
 				result += "나무나 어떤 블럭으로도 집을 지을 수 있지요. 아참, 벽을 조합하여 설치하는것도 잊지 마세요,";
 			case 181:
@@ -10986,17 +10986,17 @@
 			case 224:
 				result += "호 호 호, 그리고 한 병의... 에그노그!";
 			case 225:
-				result += "쿠키는 안구워 왔나?";
+				result += "쿠키는 안 구워 왔나?";
 			case 226:
 				result += "뭐라고? 내가 진짜가 아닌줄 알았다고?";
 			case 227:
-				result += "어떻게든 얼굴을 되돌려 놨어요. 다음엔 제발 조심히좀 해요.";
+				result += "어떻게든 얼굴을 되돌려 놨어요. 다음엔 제발 조심히 좀 해요.";
 			case 228:
 				result += "아무래도 흉터가 남겠어요.";
 			case 229:
 				result += "다 나아졌어요. 이제 절벽에서 뛰어내리는 짓은 보고싶지 않네요.";
 			case 230:
-				result += "그렇게 안아팠죠, 아팠나요?";
+				result += "그렇게 안 아팠죠, 아팠나요?";
 			case 231:
 				result += "땅 속에서 사는건 그렇게 나쁘지 안았버섯, 너 같은 바보들이 내 아이들을 대려가는것만 빼면 말이버섯.";
 			case 232:


#10 allow same badname in config

#10 allow same badname in config

--- src/Arma3BE.Client/Helpers/PlayerHelper.cs
+++ src/Arma3BE.Client/Helpers/PlayerHelper.cs
@@ -161,7 +161,7 @@
                 var badNicknames = ConfigurationManager.AppSettings["Bad_Nicknames"];
                 if (!string.IsNullOrEmpty(badNicknames))
                 {
-                    var names = badNicknames.ToLower().Split('|').ToDictionary(x=>x);
+                    var names = badNicknames.ToLower().Split('|').Distinct().ToDictionary(x=>x);

                     var bad =


fix dim

fix dim

--- TCC.Core/ViewModels/BossGageWindowViewModel.cs
+++ TCC.Core/ViewModels/BossGageWindowViewModel.cs
@@ -40,7 +40,7 @@

         //public bool IsTeraOnTop => WindowManager.IsTccVisible;

-        public int VisibleBossesCount => NpcList.ToSyncArray().Count(x => x.Visible == Visibility.Visible);
+        public int VisibleBossesCount => NpcList.ToSyncArray().Count(x => x.Visible == Visibility.Visible && x.CurrentHP > 0);

         public HarrowholdPhase CurrentHHphase
         {


LINQ.

LINQ.

--- Tabster.Core/Data/TabsterDocumentCollection.cs
+++ Tabster.Core/Data/TabsterDocumentCollection.cs
@@ -21,10 +21,7 @@

         public IEnumerator<T> GetEnumerator()
         {
-            foreach (var doc in _documents)
-            {
-                yield return doc;
-            }
+            return ((IEnumerable<T>) _documents).GetEnumerator();
         }

         #endregion


Double-click attempts checkout and does not edit if it fails (BL-9666)

--- src/BloomExe/CollectionTab/LibraryModel.cs
+++ src/BloomExe/CollectionTab/LibraryModel.cs
@@ -193,8 +193,16 @@

 		public void DoubleClickedBook()
 		{
-			if(_bookSelection.CurrentSelection.IsEditable && ! _bookSelection.CurrentSelection.HasFatalError)
+			if (_bookSelection.CurrentSelection.IsEditable && !_bookSelection.CurrentSelection.HasFatalError)
+			{
+				// If we need the book to be checked out for editing, make sure it is. If necessary
+				// and possible, check it out.
+				if (_tcManager.CurrentCollection != null &&
+				    !_tcManager.CurrentCollection.AttemptLock(
+					    Path.GetFileName(_bookSelection.CurrentSelection.FolderPath)))
+					return;
 				_editBookCommand.Raise(_bookSelection.CurrentSelection);
+			}
 		}

 		public void OpenFolderOnDisk()


Added MathematicalPractice to content package tabulator output

--- TabulateSmarterTestContentPackage/Tabulator.cs
+++ TabulateSmarterTestContentPackage/Tabulator.cs
@@ -244,7 +244,7 @@

             mItemReport = new StreamWriter(string.Concat(reportPrefix, cItemReportFn), false, Encoding.UTF8);
             // DOK is "Depth of Knowledge"
-            mItemReport.WriteLine("Folder,ItemId,ItemType,Version,Subject,Grade,Rubric,AsmtType,Standard,Claim,Target,WordlistId,ASL,BrailleType,Translation,Media,Size,DOK,AllowCalculator");
+            mItemReport.WriteLine("Folder,ItemId,ItemType,Version,Subject,Grade,Rubric,AsmtType,Standard,Claim,Target,WordlistId,ASL,BrailleType,Translation,Media,Size,DOK,AllowCalculator,MathematicalPractice");

             mStimulusReport = new StreamWriter(string.Concat(reportPrefix, cStimulusReportFn), false, Encoding.UTF8);
             mStimulusReport.WriteLine("Folder,StimulusId,Version,Subject,WordlistId,ASL,BrailleType,Translation,Media,Size,WordCount");
@@ -589,6 +589,15 @@
                 ReportError(it, ErrCat.Metadata, ErrSeverity.Degraded, "Allow Calculator field not present for MATH subject item");
             }

+            //MathematicalPractice
+            var mathematicalPractice = MathematicalPracticeFromMetadata(xmlMetadata, sXmlNs);
+            if (string.IsNullOrEmpty(mathematicalPractice) &&
+                (string.Equals(metaSubject, "MATH", StringComparison.OrdinalIgnoreCase) ||
+                string.Equals(subject, "MATH", StringComparison.OrdinalIgnoreCase)))
+            {
+                ReportError(it, ErrCat.Metadata, ErrSeverity.Degraded, "Mathematical Practice field not present for MATH subject item");
+            }
+
             // Grade
             string grade = xml.XpEvalE("itemrelease/item/attriblist/attrib[@attid='itm_att_Grade']/val").Trim();
             string metaGrade = xmlMetadata.XpEvalE("metadata/sa:smarterAppMetadata/sa:IntendedGrade", sXmlNs);
@@ -779,10 +788,11 @@
             // Size
             long size = GetItemSize(it);

-            // Folder,ItemId,ItemType,Version,Subject,Grade,Rubric,AsmtType,Standard,Claim,Target,WordlistId,ASL,BrailleType,Translation,Media,Size,DepthOfKnowledge,AllowCalculator
+            // Folder,ItemId,ItemType,Version,Subject,Grade,Rubric,AsmtType,Standard,Claim,Target,WordlistId,ASL,BrailleType,Translation,Media,Size,DepthOfKnowledge,AllowCalculator,MathematicalPractice
             mItemReport.WriteLine(string.Join(",", CsvEncode(it.Folder), CsvEncode(it.ItemId), CsvEncode(it.ItemType), CsvEncode(version), CsvEncode(subject),
                 CsvEncode(grade), CsvEncode(rubric), CsvEncode(assessmentType), CsvEncode(standard), CsvEncodeExcel(claim), CsvEncodeExcel(target), CsvEncode(wordlistId),
-                CsvEncode(asl), CsvEncode(brailleType), CsvEncode(translation), CsvEncode(media), size.ToString(), CsvEncode(depthOfKnowledge), CsvEncode(allowCalculator)));
+                CsvEncode(asl), CsvEncode(brailleType), CsvEncode(translation), CsvEncode(media), size.ToString(), CsvEncode(depthOfKnowledge), CsvEncode(allowCalculator),
+                CsvEncode(mathematicalPractice)));

             // === Tabulation is complete, check for other errors

@@ -1840,14 +1850,17 @@

         string DepthOfKnowledgeFromMetadata(XmlDocument xmlMetadata, XmlNamespaceManager xmlNamespaceManager)
         {
-            var nodeValue = xmlMetadata.XpEvalE("metadata/sa:smarterAppMetadata/sa:DepthOfKnowledge", xmlNamespaceManager);
-            return nodeValue;
+            return xmlMetadata.XpEvalE("metadata/sa:smarterAppMetadata/sa:DepthOfKnowledge", xmlNamespaceManager);
+        }
+
+        string MathematicalPracticeFromMetadata(XmlDocument xmlMetadata, XmlNamespaceManager xmlNamespaceManager)
+        {
+           return xmlMetadata.XpEvalE("metadata/sa:smarterAppMetadata/sa:MathematicalPractice", xmlNamespaceManager);
         }

         string AllowCalculatorFromMetadata(XmlDocument xmlMetadata, XmlNamespaceManager xmlNamespaceManager)
         {
-            var nodeValue = xmlMetadata.XpEvalE("metadata/sa:smarterAppMetadata/sa:AllowCalculator", xmlNamespaceManager);
-            return nodeValue;
+            return xmlMetadata.XpEvalE("metadata/sa:smarterAppMetadata/sa:AllowCalculator", xmlNamespaceManager);
         }

         private void TabulateWordList(ItemContext it)


Switch the LIcenseDialog to be optionally WebView2

--- src/BloomExe/Registration/LicenseDialog.cs
+++ src/BloomExe/Registration/LicenseDialog.cs
@@ -11,7 +11,7 @@
 {
 	public partial class LicenseDialog : Form
 	{
-		private GeckoFxBrowser _licenseBrowser;
+		private Browser _licenseBrowser;

 		///
 		/// Initialize a new instance of the <see cref="Bloom.Registration.LicenseDialog"/> class.
@@ -35,7 +35,7 @@
 			else
 				prolog = String.Format("
{0}
{1}
{1}", prolog, Environment.NewLine);

-			_licenseBrowser = new GeckoFxBrowser();
+			_licenseBrowser = BrowserMaker.MakeBrowser();
 			_licenseBrowser.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
 			_licenseBrowser.Location = new Point(12, 12);
 			_licenseBrowser.Name = "licenseBrowser";


Allow inline <script> tags and don't wrap them in another script tag - allows syntax highlighting and intellisense on AddInlineScript: Bundles.AddInlineScript(@<script type="text/javascript"> var i = 1;</script>);

--- src/Cassette/Scripts/InlineScriptBundle.cs
+++ src/Cassette/Scripts/InlineScriptBundle.cs
@@ -1,9 +1,10 @@
-using System;
+using System;
+using System.Text.RegularExpressions;
 using Cassette.Configuration;

 namespace Cassette.Scripts
 {
-    class InlineScriptBundle : ScriptBundle
+    internal class InlineScriptBundle : ScriptBundle
     {
         readonly string scriptContent;

@@ -16,15 +17,34 @@
         {
         }

+        static readonly Regex DetectScriptRegex = new Regex(@"\A \s* <script \b",
+                                                            RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
+        /// <summary>
+        /// Handle cases of the content already wrapped in a <script> tag.
+        /// </summary>
+        /// <returns></returns>
+        protected string GetScriptContent()
+        {
+            var isContentScriptTag = scriptContent != null &&
+                                     DetectScriptRegex.IsMatch(scriptContent, 0);
+            var htmlAttributes = HtmlAttributes.CombinedAttributes; // should start with a space
+
+            if (isContentScriptTag)
+            {
+                return DetectScriptRegex.Replace(scriptContent,
+                    m => m.Value + htmlAttributes, 1, 0); // don't need a space after the attributes - the regex is checking for "\b"
+            }
+            return String.Format(
+                HtmlConstants.InlineScriptHtml,
+                htmlAttributes,
+                Environment.NewLine,
+                scriptContent
+                );
+        }
+
         internal override string Render()
         {
-            var content = string.Format(
-                HtmlConstants.InlineScriptHtml,
-                HtmlAttributes.CombinedAttributes,
-                Environment.NewLine,
-                scriptContent
-            );
-
+            var content = GetScriptContent();
             var conditionalRenderer = new ConditionalRenderer();
             return conditionalRenderer.Render(Condition, html => html.Append(content));
         }


Get user kit path from build common.

Get user kit path from build common.

--- Tests/Cosmos.TestRunner.Core/Engine.Helpers.cs
+++ Tests/Cosmos.TestRunner.Core/Engine.Helpers.cs
@@ -199,23 +199,8 @@

         private static string GetCosmosUserkitFolder()
         {
-            string xResult = string.Empty;
-            using (var xSoftware = Registry.LocalMachine.OpenSubKey("Software"))
-            {
-                using (var xSysWow = xSoftware.OpenSubKey("WOW6432Node"))
-                {
-                    using (var xCosmos = xSysWow.OpenSubKey("Cosmos"))
-                    {
-                        xResult = (xCosmos.GetValue("UserKit") ?? "").ToString();
-                        if (!Directory.Exists(xResult))
-                        {
-                            throw new Exception("Unable to retrieve Cosmos userkit folder!");
-                        }
-                        return xResult;
-                    }
-                }
-                return xResult;
-            }
+            CosmosPaths.Initialize();
+            return CosmosPaths.UserKit;
         }

         private void MakeIso(string objectFile, string isoFile)


Ignore instead of outcomment failing tests

--- Tests/IntegrationTests.Shared/InstanceTests.cs
+++ Tests/IntegrationTests.Shared/InstanceTests.cs
@@ -157,12 +157,7 @@
             }
         }

-
-
-
-        /*
-         * uncomment when fix https://github.com/realm/realm-dotnet/issues/308
-        [Test]
+        [Test, Ignore("Currently doesn't work. Ref #308")]
         public void DeleteRealmFailsIfOpenSameThread()
         {
             // Arrange
@@ -172,12 +167,8 @@
             // Assert
             Assert.Throws<RealmPermissionDeniedException>(() => Realm.DeleteRealm(config));
         }
-        */

-        /*
-        Comment out until work out how to fix
-        see issue 199
-        [Test]
+        [Test, Ignore("Currently doesn't work. Ref #199")]
         public void GetInstanceShouldThrowIfFileIsLocked()
         {
             // Arrange
@@ -188,9 +179,8 @@
                 Assert.Throws<RealmPermissionDeniedException>(() => Realm.GetInstance(databasePath));
             }
         }
-        */

-        [Test]
+        [Test, Ignore("Currently doesn't work. Ref #338")]
         public void GetInstanceShouldThrowWithBadPath()
         {
             // Arrange


Marked as test

Marked as test

So... what is wrong with this code?

Well, it requires a human to interpret if it failed. I need to actually fail.

Well, that, and the fact that it won't compile as it is. I am locked in C# 5, so I cannot use string interpolation.

--- Tests/System/Threading/SemaphoreSlimTestsEx.cs
+++ Tests/System/Threading/SemaphoreSlimTestsEx.cs
@@ -1,10 +1,13 @@
-using System;
+using NUnit.Framework;
+using System;
 using System.Threading;

 namespace Tests.System.Threading
 {
-    internal class SemaphoreSlimTestsEx
+    [TestFixtureAttribute]
+    public class SemaphoreSlimTestsEx
     {
+        [Test]
         public static void WaitAsyncWaitCorrectly()
         {
             var source = new CancellationTokenSource(TimeSpan.FromSeconds(100));


[Trunk]
- Set category for ManagedSpatialiteTest

git-tfs-id: [https://tfs.codeplex.com/tfs/TFS01]$/SharpMap/Trunk;C100954

--- UnitTests/Data/Providers/ManagedSQLiteTests.cs
+++ UnitTests/Data/Providers/ManagedSQLiteTests.cs
@@ -9,7 +9,7 @@

 namespace UnitTests.Data.Providers
 {
-    [TestFixture]
+    [TestFixture, Category("KnownToFailOnTeamCityAtCodebetter")]
     public class ManagedSQLiteTests
     {
         private string GetTestDBPath()


Add helptext

Add helptext

--- Unosquare.Labs.SshDeploy/Options/CliOptions.cs
+++ Unosquare.Labs.SshDeploy/Options/CliOptions.cs
@@ -7,16 +7,16 @@
 {
     public class CliOptions
     {
-        [VerbOption("push")]
+        [VerbOption("push", HelpText = "Transfers the files and folders from a source path in the local machine to a target path in the remote machine")]
         public PushVerbOptions PushVerbOptions { get; set; }

-        [VerbOption("monitor")]
+        [VerbOption("monitor", HelpText = "Monitors a folder for a deployment and automatically transfers the files over the target.")]
         public MonitorVerbOptions MonitorVerbOptions { get; set; }

-        [VerbOption("run")]
+        [VerbOption("run", HelpText = "Runs the specified command on the target machine")]
         public RunVerbOptions RunVerbOptions { get; set; }

-        [VerbOption("shell")]
+        [VerbOption("shell", HelpText = "Opens an interactive mode shell")]
         public ShellVerbOptions ShellVerbOptions { get; set; }

     }


Remove unused field in SerializationTests

--- Tests/SerializationTests.cs
+++ Tests/SerializationTests.cs
@@ -56,7 +56,6 @@
     {
       public SerializationTests(bool useGeneratedSerializer, bool useGeneratedDeserializer, bool treatCollectionsAsUserObjects, bool supportForISerializable) : base(useGeneratedSerializer, useGeneratedDeserializer, treatCollectionsAsUserObjects, supportForISerializable)
       {
-        this.treatCollectionsAsUserObjects = treatCollectionsAsUserObjects;
       }

       [Test]
@@ -895,8 +894,6 @@
           Assert.AreEqual(src.Value, dst.Value);
         }

-      private bool treatCollectionsAsUserObjects;
-
       public class SimpleClass
       {
         public int Value { get; set; }


resolve comments

resolve comments

--- src/docfx/SubCommands/InitCommand.cs
+++ src/docfx/SubCommands/InitCommand.cs
@@ -176,7 +176,7 @@
         private static readonly IEnumerable<IQuestion> _selectorQuestions = new IQuestion[]
         {
             new YesOrNoQuestion(
-                "Will the website contain API documentation from source code?", (s, m, c) =>
+                "Does the website contain API documentation from source code?", (s, m, c) =>
                 {
                     m.Build = new BuildJsonConfig();
                     if (s)


Don't draw numbers in the collage for just a single item

--- ItemCollageUI/Form1.cs
+++ ItemCollageUI/Form1.cs
@@ -217,7 +217,8 @@
             {
                 var col = Helper.Range(0, numCols - 1).MinBy(i => colLengths[i]);
                 g.DrawImageUnscaledAndClipped(item, new Rectangle(w * col, colLengths[col], w, item.Height));
-                g.DrawString(itemIndex.ToString(), new Font("Arial", 20, FontStyle.Bold), Brushes.White, col * w + 10, colLengths[col] + 10);
+                if (items.Count > 1) // don't draw numbers for just a single item
+                    g.DrawString(itemIndex.ToString(), new Font("Arial", 20, FontStyle.Bold), Brushes.White, col * w + 10, colLengths[col] + 10);
                 colLengths[col] += item.Height;
                 itemIndex++;
             }


task-4 added version

task-4 added version

--- condiniotal-statements/conditional-stament/Task-4/Program.cs
+++ condiniotal-statements/conditional-stament/Task-4/Program.cs
@@ -9,71 +9,133 @@
             Console.OutputEncoding = System.Text.Encoding.UTF8;

             Console.WriteLine("Ohjelma lajittelee luvut nousevaan järjestykseen. Anna ohjelmalle kolme lukua");
+            bool isNumber;
+            do
+            {
+
             Console.Write("Syötä luku 1/3: ");
+
+
             // define variables
             string userInput;
             userInput = Console.ReadLine();
+
+
+

-            int numberX;
-            int.TryParse(userInput, out numberX);

-            Console.Write("Syötä luku 2/3: ");
+                int numberX;
+                int.TryParse(userInput, out numberX);
+                isNumber = int.TryParse(userInput, out numberX);
+                if (isNumber == true)
+                {
+                    do
+                    {

-            userInput = Console.ReadLine();

-            int numberY;
-            int.TryParse(userInput, out numberY);
+                    Console.Write("Syötä luku 2/3: ");

-            Console.Write("Syötä luku 3/3: ");
+                    userInput = Console.ReadLine();
+
+

-            userInput = Console.ReadLine();
+                        int numberY;
+                        int.TryParse(userInput, out numberY);
+                        isNumber = int.TryParse(userInput, out numberY);
+                        if (isNumber == true)
+                        {

-            int numberZ;
-            int.TryParse(userInput, out numberZ);

-            if (numberX < numberY)
-            {
-                if (numberX < numberZ)
-                {
+                            Console.Write("Syötä luku 3/3: ");
+                            do
+                            {

-                    if (numberY < numberZ)
-                    {
-                        Console.WriteLine($"{numberX} {numberY} {numberZ}");
+
+                            userInput = Console.ReadLine();
+
+
+
+
+                                int numberZ;
+                                int.TryParse(userInput, out numberZ);
+                                isNumber = int.TryParse(userInput, out numberZ);
+
+                                if (isNumber == true)
+                                {
+
+
+                                    if (numberX < numberY)
+                                    {
+                                        if (numberX < numberZ)
+                                        {
+
+                                            if (numberY < numberZ)
+                                            {
+                                                Console.WriteLine($"{numberX} {numberY} {numberZ}");
+                                            }
+                                            else
+                                            {
+                                                Console.WriteLine($"{numberX} {numberZ} {numberY}");
+                                            }
+                                        }
+                                        else
+                                        {
+                                            Console.WriteLine($"{numberZ} {numberX} {numberY}");
+                                        }
+                                    }
+                                    else
+                                    {
+                                        if (numberX < numberZ)
+                                        {
+                                            Console.WriteLine($"{numberY} {numberX} {numberZ}");
+                                        }
+                                        else
+                                        {
+                                            if (numberY < numberZ)
+                                            {
+                                                Console.WriteLine($"{numberY} {numberZ} {numberX}");
+                                            }
+                                            else
+                                            {
+                                                Console.WriteLine($"{numberZ} {numberY} {numberX}");
+                                            }
+                                        }
+                                    }
+                                }
+                                else
+                                {
+                                    Console.WriteLine("Syötit muuta kuin numeroita!");
+                                }
+                            }
+                            while (isNumber == false);
+                        }
+                        else
+                        {
+                            Console.WriteLine("Syötit muuta kuin numeroita!");
+                        }
                     }
-                    else
-                    {
-                        Console.WriteLine($"{numberX} {numberZ} {numberY}");
-                    }
+                    while (isNumber == false);
                 }
                 else
                 {
-                    Console.WriteLine($"{numberZ} {numberX} {numberY}");
+                    Console.WriteLine("Syötit muuta kuin numeroita!");
                 }
             }
-            else
-            {
-                if (numberX < numberZ)
-                {
-                    Console.WriteLine($"{numberY} {numberX} {numberZ}");
-                }
-                else
-                {
-                    if (numberY < numberZ)
-                    {
-                        Console.WriteLine($"{numberY} {numberZ} {numberX}");
-                    }
-                    else
-                    {
-                        Console.WriteLine($"{numberZ} {numberY} {numberX}");
-                    }
-                }
+            while (isNumber == false);
+            Console.ReadKey();
+        }
+

-
-            }
-            Console.ReadKey();
+    }
+}
+

-        }
-    }
-}
+
+
+
+
+
+
+


made it compile with VS < 2015

made it compile with VS < 2015

--- TheWheel.Mail/MailSender.cs
+++ TheWheel.Mail/MailSender.cs
@@ -52,7 +52,7 @@
             param.ParameterName = "reply_to";
             if (mail.ReplyToList.Count > 1)
                 throw new NotSupportedException("SQL Server only accepts 1 address as a reply to");
-            param.Value = mail.ReplyToList.FirstOrDefault()?.ToString() ?? "";
+            param.Value = mail.ReplyToList.FirstOrDefault().ToString() ?? "";

             param = cmd.CreateParameter();
             param.ParameterName = "subject";


Render RouteLink disabled attribute on server too

--- src/DotVVM.Framework/Controls/RouteLink.cs
+++ src/DotVVM.Framework/Controls/RouteLink.cs
@@ -80,13 +80,17 @@
             });

             var enabledValue = GetValueRaw(EnabledProperty);
-            if (enabledValue is bool)
+            if (enabledValue is bool isEnabled)
             {
-                writer.AddKnockoutDataBind(EnableKnockoutBinding, enabledValue.ToString().ToLower());
+                writer.AddKnockoutDataBind(EnableKnockoutBinding, isEnabled.ToString().ToLower());
             }
             else if (enabledValue is IValueBinding enabledBinding)
             {
                 writer.AddKnockoutDataBind(EnableKnockoutBinding, enabledBinding.GetKnockoutBindingExpression(this));
+            }
+            if (!GetValue<bool>(EnabledProperty))
+            {
+                writer.AddAttribute("disabled", "disabled");
             }

             WriteOnClickAttribute(writer, context);


Fix failing of build

Fix failing of build

--- Titan/Bot/AccountManager.cs
+++ Titan/Bot/AccountManager.cs
@@ -158,7 +158,7 @@

         }

-        private void SaveIndexFile()
+        public void SaveIndexFile()
         {
             if(_indexFile.Exists)
             {


Fix spacing.

Fix spacing.

--- src/Engine/MvcTurbine.Web/Config/Engine.cs
+++ src/Engine/MvcTurbine.Web/Config/Engine.cs
@@ -38,10 +38,10 @@
 			.EmbeddedViewResolve<EmbeddedViewResolver>()
 			.ViewPageActivator<TurbineViewPageActivator>()
 			.HttpModuleManager<HttpModuleManager>()
-            .ViewEngineManager<ViewEngineManager>()
+			.ViewEngineManager<ViewEngineManager>()
 			.AssemblyFilter<CommonAssemblyFilter>()
 			.HttpModuleProvider<AllHttpModulesRegistry>()
-            .ViewEngineProvider<AllViewEngineRegistry>()
+			.ViewEngineProvider<AllViewEngineRegistry>()
 			.RegisterBuiltInCoreBlades();
 		}


Add GetTodo to TodoList aggregate

Add GetTodo to TodoList aggregate

--- src/EventSourcingTodo/Domain/Aggregates.cs
+++ src/EventSourcingTodo/Domain/Aggregates.cs
@@ -35,6 +35,10 @@

         private List<Todo> todos = new List<Todo>();
         public IEnumerable<Todo> Todos { get { return todos; } }
+        public Todo GetTodo(Guid id)
+        {
+            return todos.FirstOrDefault(x => x.Id == id);
+        }

         public void Add(Guid todoId, string description)
         {


Use normalized FileInfo.FullName when calculating relative path.

https://github.com/dotnet/corefx/issues/29368

--- src/Foundatio/Storage/FolderFileStorage.cs
+++ src/Foundatio/Storage/FolderFileStorage.cs
@@ -233,7 +233,7 @@
                     continue;

                 list.Add(new FileSpec {
-                    Path = path.Replace(Folder, String.Empty),
+                    Path = info.FullName.Replace(Folder, String.Empty),
                     Created = info.CreationTimeUtc,
                     Modified = info.LastWriteTimeUtc,
                     Size = info.Length


Update LiteDbMonitoringApi.cs

Update LiteDbMonitoringApi.cs

Fix

--- src/Hangfire.LiteDB/LiteDbMonitoringApi.cs
+++ src/Hangfire.LiteDB/LiteDbMonitoringApi.cs
@@ -107,7 +107,7 @@
                     CreatedAt = x.CreatedAt,
                     Reason = x.Reason,
                     Data = x.Data
-                }).ToList().OrderBy(x => x.CreatedAt);
+                }).OrderBy(x => x.CreatedAt).ToList();

                 return new JobDetailsDto
                 {


updated unit tests to account for time zones

--- Trady.Test/IndicatorTest.cs
+++ Trady.Test/IndicatorTest.cs
@@ -1,4 +1,4 @@
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
 using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
@@ -582,7 +582,7 @@
         public async Task TestVwap_IsAccurateAsync()
         {
             var candles = await ImportIOhlcvDatasAsync("NFLX_5m_1_27_2019.csv");
-            var selected = candles.Where(x => x.DateTime.TimeOfDay <= new DateTime(2019, 1, 25, 15, 15, 00).TimeOfDay);
+            var selected = candles.Where(x => x.DateTime <= new DateTimeOffset(2019, 1, 25, 15, 15, 00, new TimeSpan(-6, 0, 0)));
             var result = selected.Vwap()[selected.Count() - 1].Tick;
             Assert.IsTrue(335.67m.IsApproximatelyEquals(result.Value));
         }
@@ -591,7 +591,7 @@
         public async Task TestVwap_CloseIsAboveVwapAsync()
         {
             var candles = await ImportIOhlcvDatasAsync("NFLX_5m_1_27_2019.csv");
-            var selected = candles.Where(x => x.DateTime.TimeOfDay <= new DateTime(2019, 1, 25, 09, 40, 00).TimeOfDay);
+            var selected = candles.Where(x => x.DateTime <= new DateTimeOffset(2019, 1, 25, 09, 40, 00, new TimeSpan(-6, 0, 0)));
             var result = selected.Vwap()[selected.Count() - 1].Tick;
             var close = selected.Last().Close;
             Assert.IsTrue(330.32m.IsApproximatelyEquals(result.Value));
@@ -602,7 +602,7 @@
         public async Task TestVwap_CloseIsBelowVwapAsync()
         {
             var candles = await ImportIOhlcvDatasAsync("NFLX_5m_1_27_2019.csv");
-            var selected = candles.Where(x => x.DateTime.TimeOfDay <= new DateTime(2019, 1, 25, 09, 30, 00).TimeOfDay);
+            var selected = candles.Where(x => x.DateTime <= new DateTimeOffset(2019, 1, 25, 09, 30, 00, new TimeSpan(-6, 0, 0)));
             var result = selected.Vwap()[selected.Count() - 1].Tick;
             var close = selected.Last().Close;
             Assert.IsTrue(329.68m.IsApproximatelyEquals(result.Value));


Fixed InMemoryProvider to get index from Persistence base class instead of setting it by itself

--- tests/Proto.Persistence.Tests/InMemoryProvider.cs
+++ tests/Proto.Persistence.Tests/InMemoryProvider.cs
@@ -47,12 +47,8 @@
         public Task<long> PersistEventAsync(string actorName, long index, object @event)
         {
             var events = _events.GetOrAdd(actorName, new Dictionary<long, object>());
-            long nextEventIndex = 1;
-            if (events.Any())
-            {
-                nextEventIndex = events.Last().Key + 1;
-            }
-            events.Add(nextEventIndex, @event);
+
+            events.Add(index, @event);

             return Task.FromResult(0L);
         }


docs: adds release note for publishing Experiment.AutoFixture as dll.

--- build/CommonAssemblyInfo.cs
+++ build/CommonAssemblyInfo.cs
@@ -14,22 +14,8 @@
 [assembly: AssemblyInformationalVersion("0.19.0")]

 /*
- * Version 0.19.0
+ * Version 0.19.1
  *
- * - [NEW] Declaration of test fixture factory using attribute
- *   Introduces the new model to create test fixture. Using the
- *   TestFixtureFactoryType attribute, a type of ITestFixtureFactory can be
- *   defined and will be used to create a factory for test fixture.
- *
- * - [FIX] Renames the test attributes. (BREAKING CHANGE)
- *   TheoremAttriute -> ExamAttribute
- *   FirstClassTheoremAttriute -> FirstClassExamAttribute
- *
- * - [FIX] Splits the Experiment project to Experiment and Experiment.Xunit
- *   projects. (BREAKING CHANGE)
- *
- * - [NEW] Rearrages nuget packages to reflect the splited projects.
- *   (BREAKING CHANGE)
- *   Publishes the new package 'Experiment.Xunit', and deletes the packages
- *   'Experiment.AutoFixtureWithExample' and 'Experiment'.
+ * - [FIX] Publishes Experiment.AutoFixture as library(dll) form, instead of
+ *   transform source files(nuget). (BREAKING-CHANGE)
  */


docs: added release note for removing InverseEqualityComparer.

--- build/CommonAssemblyInfo.cs
+++ build/CommonAssemblyInfo.cs
@@ -17,4 +17,7 @@
  * Version 0.23.9
  *
  * - [FIX] introduced the new FuncTestFixtureFactory class.
+ *
+ * - [FIX] used composition instead of inheritance from
+ *   InverseEqualityComparer<T> and removed the unused class. (BREAKING-CHANGE)
  */