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;
///
/// Handles to the production assemblies. The boundary tests assert on real assembly references
/// () — 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.
///
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 ReferencedAssemblyNames(this Assembly assembly) =>
assembly.GetReferencedAssemblies()
.Select(name => name.Name!)
.ToHashSet(StringComparer.Ordinal);
}