public void Test_AddAllSectionsWithContentAsstrings()
        {
            Section section;

            section = _template.AddContextSection(_softwareSystem, Format.Markdown, "Context section");
            AssertSection(_softwareSystem, "Context", 1, Format.Markdown, "Context section", 1, section);

            section = _template.AddFunctionalOverviewSection(_softwareSystem, Format.Markdown, "Functional overview section");
            AssertSection(_softwareSystem, "Functional Overview", 2, Format.Markdown, "Functional overview section", 2, section);

            section = _template.AddQualityAttributesSection(_softwareSystem, Format.Markdown, "Quality attributes section");
            AssertSection(_softwareSystem, "Quality Attributes", 2, Format.Markdown, "Quality attributes section", 3, section);

            section = _template.AddConstraintsSection(_softwareSystem, Format.Markdown, "Constraints section");
            AssertSection(_softwareSystem, "Constraints", 2, Format.Markdown, "Constraints section", 4, section);

            section = _template.AddPrinciplesSection(_softwareSystem, Format.Markdown, "Principles section");
            AssertSection(_softwareSystem, "Principles", 2, Format.Markdown, "Principles section", 5, section);

            section = _template.AddSoftwareArchitectureSection(_softwareSystem, Format.Markdown, "Software architecture section");
            AssertSection(_softwareSystem, "Software Architecture", 3, Format.Markdown, "Software architecture section", 6, section);

            section = _template.AddContainersSection(_softwareSystem, Format.Markdown, "Containers section");
            AssertSection(_softwareSystem, "Containers", 3, Format.Markdown, "Containers section", 7, section);

            section = _template.AddComponentsSection(_containerA, Format.Markdown, "Components section for container A");
            AssertSection(_containerA, "Components", 3, Format.Markdown, "Components section for container A", 8, section);

            section = _template.AddComponentsSection(_containerB, Format.Markdown, "Components section for container B");
            AssertSection(_containerB, "Components", 3, Format.Markdown, "Components section for container B", 9, section);

            section = _template.AddCodeSection(_componentA1, Format.Markdown, "Code section for component A1");
            AssertSection(_componentA1, "Code", 3, Format.Markdown, "Code section for component A1", 10, section);

            section = _template.AddCodeSection(_componentA2, Format.Markdown, "Code section for component A2");
            AssertSection(_componentA2, "Code", 3, Format.Markdown, "Code section for component A2", 11, section);

            section = _template.AddDataSection(_softwareSystem, Format.Markdown, "Data section");
            AssertSection(_softwareSystem, "Data", 3, Format.Markdown, "Data section", 12, section);

            section = _template.AddInfrastructureArchitectureSection(_softwareSystem, Format.Markdown, "Infrastructure architecture section");
            AssertSection(_softwareSystem, "Infrastructure Architecture", 4, Format.Markdown, "Infrastructure architecture section", 13, section);

            section = _template.AddDeploymentSection(_softwareSystem, Format.Markdown, "Deployment section");
            AssertSection(_softwareSystem, "Deployment", 4, Format.Markdown, "Deployment section", 14, section);

            section = _template.AddDevelopmentEnvironmentSection(_softwareSystem, Format.Markdown, "Development environment section");
            AssertSection(_softwareSystem, "Development Environment", 4, Format.Markdown, "Development environment section", 15, section);

            section = _template.AddOperationAndSupportSection(_softwareSystem, Format.Markdown, "Operation and support section");
            AssertSection(_softwareSystem, "Operation and Support", 4, Format.Markdown, "Operation and support section", 16, section);

            section = _template.AddDecisionLogSection(_softwareSystem, Format.Markdown, "Decision log section");
            AssertSection(_softwareSystem, "Decision Log", 5, Format.Markdown, "Decision log section", 17, section);
        }
        static void Main()
        {
            Workspace workspace = new Workspace("Documentation - Structurizr", "An empty software architecture document using the Structurizr template.");
            Model     model     = workspace.Model;
            ViewSet   views     = workspace.Views;

            Person         user           = model.AddPerson("User", "A user of my software system.");
            SoftwareSystem softwareSystem = model.AddSoftwareSystem("Software System", "My software system.");

            user.Uses(softwareSystem, "Uses");

            SystemContextView contextView = views.CreateSystemContextView(softwareSystem, "SystemContext", "An example of a System Context diagram.");

            contextView.AddAllSoftwareSystems();
            contextView.AddAllPeople();

            Styles styles = views.Configuration.Styles;

            styles.Add(new ElementStyle(Tags.Person)
            {
                Shape = Shape.Person
            });

            StructurizrDocumentationTemplate template = new StructurizrDocumentationTemplate(workspace);

            // this is the Markdown version
            DirectoryInfo documentationRoot = new DirectoryInfo("Documentation" + Path.DirectorySeparatorChar + "structurizr" + Path.DirectorySeparatorChar + "markdown");

            template.AddContextSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "01-context.md")));
            template.AddFunctionalOverviewSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "02-functional-overview.md")));
            template.AddQualityAttributesSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "03-quality-attributes.md")));
            template.AddConstraintsSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "04-constraints.md")));
            template.AddPrinciplesSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "05-principles.md")));
            template.AddSoftwareArchitectureSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "06-software-architecture.md")));
            template.AddDataSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "07-data.md")));
            template.AddInfrastructureArchitectureSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "08-infrastructure-architecture.md")));
            template.AddDeploymentSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "09-deployment.md")));
            template.AddDevelopmentEnvironmentSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "10-development-environment.md")));
            template.AddOperationAndSupportSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "11-operation-and-support.md")));
            template.AddDecisionLogSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "12-decision-log.md")));

            // this is the AsciiDoc version
//            DirectoryInfo documentationRoot = new DirectoryInfo("Documentation" + Path.DirectorySeparatorChar + "structurizr" + Path.DirectorySeparatorChar + "asciidoc");
//            template.AddContextSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "01-context.adoc")));
//            template.AddFunctionalOverviewSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "02-functional-overview.adoc")));
//            template.AddQualityAttributesSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "03-quality-attributes.adoc")));
//            template.AddConstraintsSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "04-constraints.adoc")));
//            template.AddPrinciplesSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "05-principles.adoc")));
//            template.AddSoftwareArchitectureSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "06-software-architecture.adoc")));
//            template.AddDataSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "07-data.adoc")));
//            template.AddInfrastructureArchitectureSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "08-infrastructure-architecture.adoc")));
//            template.AddDeploymentSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "09-deployment.adoc")));
//            template.AddDevelopmentEnvironmentSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "10-development-environment.adoc")));
//            template.AddOperationAndSupportSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "11-operation-and-support.adoc")));
//            template.AddDecisionLogSection(softwareSystem, new FileInfo(Path.Combine(documentationRoot.FullName, "12-decision-log.adoc")));

            StructurizrClient structurizrClient = new StructurizrClient(ApiKey, ApiSecret);

            structurizrClient.PutWorkspaceAsync(WorkspaceId, workspace).Wait();
        }