private static TestContext CreateContext()
        {
            var connection = new SqliteConnection("DataSource=:memory:");

            connection.Open();

            var services = new ServiceCollection();

            var user = new TestUser
            {
                Username      = "******",
                Discriminator = "0001"
            };

            var channel = new TestGuildTextChannel
            {
                Name = "general"
            };

            var role  = new TestRole();
            var guild = new TestGuild
            {
                Channels = { channel },
                Roles    = { role }
            };

            var guildUser = guild.AddMember(user);

            var data = new TestBotData
            {
                Users  = { user },
                Guilds = { guild }
            };

            services.AddLocalizations();
            services.AddCommand(builder =>
            {
                builder.AddModule <FooModule>();
            });
            services.AddCommandEfCoreRepositories <TestDbContext>();
            services.AddSingleton <IMessageContextAccessor, MessageContextAccessor>();
            services.AddDbContext <TestDbContext>(builder =>
            {
                builder.UseSqlite(connection);
            });

            var provider = services.BuildTestServiceProvider(data);

            provider.GetRequiredService <TestDbContext>().Database.EnsureCreated();

            return(new TestContext(connection)
            {
                PermissionManager = provider.GetRequiredService <IPermissionManager>(),
                Guild = guild,
                Channel = channel,
                User = guildUser,
                Role = role
            });
        }
Ejemplo n.º 2
0
        private static TestContext CreateContext()
        {
            var connection = new SqliteConnection("DataSource=:memory:");

            connection.Open();

            var services = new ServiceCollection();

            var channel = new TestGuildTextChannel
            {
                Name = "general"
            };

            var role  = new TestRole();
            var guild = new TestGuild
            {
                Channels = { channel },
                Roles    = { role }
            };

            var data = new TestBotData
            {
                Guilds = { guild }
            };

            services.AddLocalizations();
            services.AddCommandEfCoreRepositories <TestDbContext>();
            services.AddSingleton <IMessageContextAccessor, MessageContextAccessor>();

            services.AddCommand(builder =>
            {
                builder.AddModule <FooModule>();
                builder.AddModule <CoreModule>();
                builder.AddModule <DefaultModule>();
            });

            services.AddDbContext <TestDbContext>(builder =>
            {
                builder.UseSqlite(connection);
            });

            var provider = services.BuildTestServiceProvider(data);

            provider.GetRequiredService <TestDbContext>().Database.EnsureCreated();

            return(new TestContext(connection)
            {
                ModuleManager = provider.GetRequiredService <IModuleManager>(),
                Channel = channel,
                Guild = guild
            });
        }
Ejemplo n.º 3
0
        public async Task ReadTypesAsync()
        {
            var user = new TestUser
            {
                Username      = "******",
                Discriminator = "0001"
            };

            var ambiguousUser1 = new TestUser
            {
                Username      = "******",
                Discriminator = "0001"
            };

            var ambiguousUser2 = new TestUser
            {
                Username      = "******",
                Discriminator = "0002"
            };

            var channel = new TestGuildTextChannel();
            var role    = new TestRole();
            var guild   = new TestGuild
            {
                Channels = { channel },
                Roles    = { role },
                Members  = { user, ambiguousUser1, ambiguousUser2 }
            };

            var data = new TestBotData
            {
                Users  = { user, ambiguousUser1, ambiguousUser2 },
                Guilds = { guild }
            };

            var collection = new ServiceCollection();

            collection.AddArgumentWithParsers();

            await using var provider = collection.BuildTestServiceProvider(data);
            var factory = provider.GetRequiredService <IArgumentReaderFactory>();

            var reader = factory.Create($"Foo 'Foo Bar' <@{user.Id}> <#{channel.Id}> <@&{role.Id}> -100 100 Test Foo Bar Baz", guild.Id);

            Assert.Null(await reader.ReadUserMentionAsync());
            Assert.Equal("Foo", reader.ReadUnsafeString());
            Assert.Equal("Foo Bar", reader.ReadUnsafeString());
            Assert.Equal(user, await reader.ReadUserMentionAsync());
            Assert.Equal(channel, await reader.ReadGuildChannelAsync());
            Assert.Equal(role, await reader.ReadRoleMentionAsync());
            Assert.Equal(-100, reader.ReadInt64());
            Assert.Equal(100u, reader.ReadUInt64());
            Assert.Equal(user, await reader.ReadUserMentionAsync());
            Assert.Equal("Foo Bar Baz", await reader.ReadRemainingAsync());
            Assert.Null(reader.ReadUnsafeString());
            reader.Reset();
            Assert.Equal("Foo", reader.ReadUnsafeString());

            reader = factory.Create("DuplicateName", guild.Id);

            await Assert.ThrowsAsync <AmbiguousArgumentMatchException>(async() => await reader.ReadUserMentionAsync());
        }