43 lines
1.6 KiB
C#
43 lines
1.6 KiB
C#
|
|
using System.Reflection;
|
||
|
|
using TeamUp.Bootstrap;
|
||
|
|
using TeamUp.Infrastructure.Persistence;
|
||
|
|
using TeamUp.Modules.Assembler;
|
||
|
|
using TeamUp.Modules.Governance;
|
||
|
|
using TeamUp.Modules.Identity;
|
||
|
|
using TeamUp.Modules.Integrations;
|
||
|
|
using TeamUp.Modules.Memory;
|
||
|
|
using TeamUp.Modules.OrgBoard;
|
||
|
|
using TeamUp.Modules.Skills;
|
||
|
|
using TeamUp.SharedKernel.Modularity;
|
||
|
|
|
||
|
|
namespace TeamUp.ArchitectureTests;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Handles to the production assemblies. The boundary tests assert on real assembly references
|
||
|
|
/// (<see cref="Assembly.GetReferencedAssemblies"/>) — reflection is deterministic and needs no
|
||
|
|
/// third-party arch-test framework. Because each module is its own assembly, an assembly-level
|
||
|
|
/// reference check is exactly the "no cross-module access" boundary.
|
||
|
|
/// </summary>
|
||
|
|
internal static class ArchitectureFixture
|
||
|
|
{
|
||
|
|
public static readonly Assembly SharedKernel = typeof(IModule).Assembly;
|
||
|
|
public static readonly Assembly Infrastructure = typeof(MigrationRunner).Assembly;
|
||
|
|
public static readonly Assembly Bootstrap = typeof(ModuleCatalog).Assembly;
|
||
|
|
|
||
|
|
public static readonly Assembly[] ModuleAssemblies =
|
||
|
|
[
|
||
|
|
typeof(IdentityModule).Assembly,
|
||
|
|
typeof(OrgBoardModule).Assembly,
|
||
|
|
typeof(SkillsModule).Assembly,
|
||
|
|
typeof(IntegrationsModule).Assembly,
|
||
|
|
typeof(MemoryModule).Assembly,
|
||
|
|
typeof(AssemblerModule).Assembly,
|
||
|
|
typeof(GovernanceModule).Assembly,
|
||
|
|
];
|
||
|
|
|
||
|
|
public static HashSet<string> ReferencedAssemblyNames(this Assembly assembly) =>
|
||
|
|
assembly.GetReferencedAssemblies()
|
||
|
|
.Select(name => name.Name!)
|
||
|
|
.ToHashSet(StringComparer.Ordinal);
|
||
|
|
}
|