Beispiel #1
0
        private static GrandDesign SetupGrandDesign()
        {
            var testObject = new GrandDesign();

            CreateTestTypesAndInstances(ref testObject);
            CreateUsersAndSecurity(ref testObject);
            CreateReportsAndFormsEtc(ref testObject);
            return(testObject);
        }
Beispiel #2
0
        private static void CreateReportsAndFormsEtc(ref GrandDesign testObject)
        {
            //
            // Reports
            //
            var unitReport = ActionTestHelper.CreateReport("test:unitReport", "Loose Units", null, testObject.Types["unit"], true);

            unitReport.ResourceInFolder.Add(testObject.WorkingFolder.As <NavContainer>());
            unitReport.Save();
            testObject.Reports.Add("unitReport", unitReport);

            var parentReport = ActionTestHelper.CreateReport("test:parentReport", "Parents", null, testObject.Types["parent"], true);

            parentReport.ResourceInFolder.Add(testObject.WorkingFolder.As <NavContainer>());
            parentReport.Save();
            testObject.Reports.Add("parentReport", parentReport);

            var grandParentReport = ActionTestHelper.CreateReport("test:grandParentReport", "Grandparents", null, testObject.Types["grandParent"], true);

            grandParentReport.ResourceInFolder.Add(testObject.WorkingFolder.As <NavContainer>());
            grandParentReport.Save();
            testObject.Reports.Add("grandParentReport", grandParentReport);

            //
            // Forms
            //
            var unitForm = ActionTestHelper.CreateForm("test:unitForm", "Loose Unit", null, testObject.Types["unit"], true);

            unitForm.Save();
            testObject.Forms.Add("unitForm", unitForm);

            var parentForm = ActionTestHelper.CreateForm("test:parentForm", "Parent", null, testObject.Types["parent"], true);

            parentForm.Save();
            testObject.Forms.Add("parentForm", parentForm);

            var grandParentForm = ActionTestHelper.CreateForm("test:grandParentForm", "Grandparent", null, testObject.Types["grandParent"], true);

            grandParentForm.Save();
            testObject.Forms.Add("grandParentForm", grandParentForm);

            //
            // Screen
            //
            var actionsScreen = ActionTestHelper.CreateScreen("test:getActionsScreen",
                                                              "Action Screen", null, new Chart[0], new[] { parentReport }, new[] { unitForm },
                                                              out testObject.ScreenComponents);

            actionsScreen.ResourceInFolder.Add(testObject.WorkingFolder.As <NavContainer>());
            actionsScreen.Save();

            //
            // Workflows
            //
            var unitWorkflow = ActionTestHelper.CreateWorkflow("test:unitWorkflow", "Stop", null, testObject.Types["unit"], "Unit");

            unitWorkflow.Save();

            var parentWorkflow = ActionTestHelper.CreateWorkflow("test:parentWorkflow", "Look", null, testObject.Types["parent"], "Parent");

            parentWorkflow.Save();

            var grandParentWorkflow = ActionTestHelper.CreateWorkflow("test:grandParentWorkflow", "Listen", null, testObject.Types["grandParent"], "Grandparent");

            grandParentWorkflow.Save();

            //
            // Document Generation
            //
            var unitGenerator = ActionTestHelper.CreateReportTemplate("text:unitGenerator", "Some Unit", null, testObject.Types["unit"]);

            unitGenerator.Save();

            var parentGenerator = ActionTestHelper.CreateReportTemplate("text:parentGenerator", "Muppet", null, testObject.Types["parent"]);

            parentGenerator.Save();

            var grandParentGenerator = ActionTestHelper.CreateReportTemplate("text:grandParentGenerator", "Some Elder", null, testObject.Types["grandParent"]);

            grandParentGenerator.Save();
        }
Beispiel #3
0
        private static void CreateUsersAndSecurity(ref GrandDesign testObject)
        {
            //
            // Users
            //
            var administratorUser = Entity.Get <UserAccount>(new EntityRef("core:administratorUserAccount"), true);

            testObject.Accounts.Add("administrator", administratorUser);

            //
            // Access Rules
            //
            new AccessRuleFactory().AddAllowByQuery(administratorUser.As <Subject>(),
                                                    testObject.Types["unit"].As <SecurableEntity>(),
                                                    new[] { "core:read", "core:modify", "core:delete", "core:create" }.Select(p => new EntityRef(p)),
                                                    TestQueries.Entities(testObject.Types["unit"]).ToReport());

            //
            // Read
            //
            var reader = Entity.Create <Person>();

            reader.FirstName = "Robbie";
            reader.LastName  = "Reader";

            var readerAccount = Entity.Create <UserAccount>();

            readerAccount.Name          = "reader";
            readerAccount.AccountHolder = reader;
            readerAccount.Save();
            testObject.Accounts.Add("reader", readerAccount);

            new AccessRuleFactory().AddAllowByQuery(readerAccount.As <Subject>(),
                                                    testObject.Types["unit"].As <SecurableEntity>(),
                                                    new[] { "core:read" }.Select(p => new EntityRef(p)),
                                                    TestQueries.Entities(testObject.Types["unit"]).ToReport());

            //
            // Read + Modify
            //
            var modifier = Entity.Create <Person>();

            modifier.FirstName = "Margie";
            modifier.LastName  = "Modifier";

            var modifierAccount = Entity.Create <UserAccount>();

            modifierAccount.Name          = "modifier";
            modifierAccount.AccountHolder = modifier;
            modifierAccount.Save();
            testObject.Accounts.Add("modifier", modifierAccount);

            new AccessRuleFactory().AddAllowByQuery(modifierAccount.As <Subject>(),
                                                    testObject.Types["unit"].As <SecurableEntity>(),
                                                    new[] { "core:read", "core:modify" }.Select(p => new EntityRef(p)),
                                                    TestQueries.Entities(testObject.Types["unit"]).ToReport());

            //
            // Read, Modify + Create
            //
            var creator = Entity.Create <Person>();

            creator.FirstName = "Connie";
            creator.LastName  = "Creator";

            var creatorAccount = Entity.Create <UserAccount>();

            creatorAccount.Name          = "creator";
            creatorAccount.AccountHolder = creator;
            creatorAccount.Save();
            testObject.Accounts.Add("creator", creatorAccount);

            new AccessRuleFactory().AddAllowByQuery(creatorAccount.As <Subject>(),
                                                    testObject.Types["unit"].As <SecurableEntity>(),
                                                    new[] { "core:read", "core:modify", "core:create" }.Select(p => new EntityRef(p)),
                                                    TestQueries.Entities(testObject.Types["unit"]).ToReport());

            //
            // Read, Modify + Delete
            //
            var deleter = Entity.Create <Person>();

            deleter.FirstName = "Donnie";
            deleter.LastName  = "Deleter";

            var deleterAccount = Entity.Create <UserAccount>();

            deleterAccount.Name          = "deleter";
            deleterAccount.AccountHolder = deleter;
            deleterAccount.Save();
            testObject.Accounts.Add("deleter", deleterAccount);

            new AccessRuleFactory().AddAllowByQuery(deleterAccount.As <Subject>(),
                                                    testObject.Types["unit"].As <SecurableEntity>(),
                                                    new[] { "core:read", "core:modify", "core:delete" }.Select(p => new EntityRef(p)),
                                                    TestQueries.Entities(testObject.Types["unit"]).ToReport());

            //
            // Folder
            //
            var folder = Entity.Create <Folder>();

            folder.Name = "Get Actions";
            folder.ResourceInFolder.Add(Entity.GetByName <NavSection>("Test Solution").First().As <NavContainer>());
            folder.Save();
            testObject.WorkingFolder = folder;

            //
            // All these accounts should see...
            //
            foreach (var account in testObject.Accounts.Values)
            {
                //
                // ...workflows
                //
                new AccessRuleFactory().AddAllowByQuery(account.As <Subject>(),
                                                        Workflow.Workflow_Type.As <SecurableEntity>(),
                                                        new EntityRef("core:read").ToEnumerable(),
                                                        TestQueries.Entities(new EntityRef("core:workflow")).ToReport());

                //
                // ... report templates
                //
                new AccessRuleFactory().AddAllowByQuery(account.As <Subject>(),
                                                        ReportTemplate.ReportTemplate_Type.As <SecurableEntity>(),
                                                        new EntityRef("core:read").ToEnumerable(),
                                                        TestQueries.Entities(new EntityRef("core:reportTemplate")).ToReport());
            }
        }
Beispiel #4
0
        private static void CreateTestTypesAndInstances(ref GrandDesign testObject)
        {
            //
            // Fields
            //
            var unitFieldGroup = Entity.Create <FieldGroup>();

            unitFieldGroup.Name = "Unit Test";

            var isHappyField = Entity.Create <BoolField>();

            isHappyField.Alias        = "test:isHappy";
            isHappyField.Name         = "Happy?";
            isHappyField.FieldInGroup = unitFieldGroup;

            var birthdayField = Entity.Create <DateField>();

            birthdayField.Alias        = "test:birthday";
            birthdayField.Name         = "Birthday";
            birthdayField.FieldInGroup = unitFieldGroup;

            //
            // Types
            //
            var unit = Entity.Create <Definition>().As <EntityType>();

            unit.Alias = "test:unit";
            unit.Name  = "Loose Unit";
            unit.Inherits.Add(UserResource.UserResource_Type);
            unit.FieldGroups.Add(unitFieldGroup);
            unit.Fields.Add(isHappyField.As <Field>());
            unit.Fields.Add(birthdayField.As <Field>());
            unit.Save();

            var parent = Entity.Create <Definition>().As <EntityType>();

            parent.Alias = "test:parent";
            parent.Name  = "Parent";
            parent.Inherits.Add(unit);
            parent.Save();

            var grandParent = Entity.Create <Definition>().As <EntityType>();

            grandParent.Alias = "test:grandParent";
            grandParent.Name  = "Grandparent";
            grandParent.Inherits.Add(parent);
            grandParent.Save();

            //
            // Relationships
            //
            var kidsRel = Entity.Create <Relationship>();

            kidsRel.Name                        = "Kids";
            kidsRel.FromType                    = parent;
            kidsRel.FromName                    = "Parental";
            kidsRel.ToType                      = unit;
            kidsRel.ToName                      = "Tin Lid";
            kidsRel.RelType_Enum                = RelTypeEnum_Enumeration.RelManyToMany;
            kidsRel.Cardinality_Enum            = CardinalityEnum_Enumeration.ManyToMany;
            kidsRel.RelationshipInToTypeGroup   = unitFieldGroup;
            kidsRel.RelationshipInFromTypeGroup = unitFieldGroup;
            kidsRel.Save();

            var grandKidsRel = Entity.Create <Relationship>();

            grandKidsRel.Name                        = "Grandchildren";
            grandKidsRel.FromType                    = grandParent;
            grandKidsRel.FromName                    = "Mouldy Oldy";
            grandKidsRel.ToType                      = unit;
            grandKidsRel.ToName                      = "Whipper Snapper";
            grandKidsRel.RelType_Enum                = RelTypeEnum_Enumeration.RelManyToMany;
            grandKidsRel.Cardinality_Enum            = CardinalityEnum_Enumeration.ManyToMany;
            grandKidsRel.RelationshipInToTypeGroup   = unitFieldGroup;
            grandKidsRel.RelationshipInFromTypeGroup = unitFieldGroup;
            grandKidsRel.Save();

            //
            // Instances
            //
            var morty = Entity.Create(unit);

            morty.SetField("core:name", "Morty");
            morty.SetField(isHappyField, false);
            morty.SetField(birthdayField, new DateTime(2012, 06, 30));
            morty.Save();

            var jerry = Entity.Create(parent);

            jerry.SetField("core:name", "Jerry");
            jerry.SetField(isHappyField, false);
            jerry.SetField(birthdayField, new DateTime(1976, 03, 13));
            jerry.SetRelationships(kidsRel, new EntityRelationship <IEntity>(morty).ToEntityRelationshipCollection());
            jerry.Save();

            var rick = Entity.Create(grandParent);

            rick.SetField("core:name", "Rick");
            rick.SetField(isHappyField, true);
            rick.SetField(birthdayField, new DateTime(1955, 10, 24));
            rick.SetRelationships(kidsRel, new EntityRelationship <IEntity>(jerry).ToEntityRelationshipCollection());
            rick.SetRelationships(grandKidsRel, new EntityRelationship <IEntity>(morty).ToEntityRelationshipCollection());
            rick.Save();

            testObject.Types.Add("unit", unit);
            testObject.Types.Add("parent", parent);
            testObject.Types.Add("grandParent", grandParent);
        }