Проверьте все конечные точки для аутентификации. Net core 3.0 - PullRequest
0 голосов
/ 16 марта 2020

Я хочу построить интеграционные тесты, чтобы убедиться, что все наши конечные точки заблокированы за аутентификацией.

Затем я получу все наши конечные точки от нашего чванства. Как я могу ждать этого вызова и затем использовать эти данные в качестве memberData или classData? Так как это асин c. Должен ли я использовать светильники, или какие-то ---- данные?

    [Collection("A collection")]
    public class EndpointsTests
    {
        RouteDataFixture fixture;

        public EndpointsTests(RouteDataFixture fixture)
        {
            this.fixture = fixture;
        }

        [Theory]
        [ClassData(typeof(SomeClassWithAsyncConstructor))]
        public async Task Test_This(string path, string method)
        {
            //test the awaited data from class
            if(method == "GET"=
                var response = await fixture.GetAsync(path)

            //Check if the response is unauthorized since we didn't send a token
        }
    }

1 Ответ

2 голосов
/ 16 марта 2020

Если нет особой причины, вы можете использовать модульный тест вместо интеграционного теста, и вы можете проверить свои конечные точки, определенные или не определенные какие-либо атрибуты авторизации. Например;

    public class SomeController : Controller
    {
        [AllowAnonymous]
        public IAsyncResult Post1()
        {
            // codes...
        }

        [Authorize("some_permission")]
        public IAsyncResult Post2()
        {
            // codes...
        }

        public IAsyncResult Post3()
        {
            // codes...
        }
    }

это ваш класс контроллера.

    [Fact]
    public void Test()
    {
        var _endpoints = new List<(Type, MethodInfo)>(); // All endpoints in my project
        var asm = Assembly.Load("MyAssembly");
        var cType = typeof(Controller);
        var types = asm.GetTypes().Where(x => x.IsSubclassOf(cType)).ToList();
        foreach (Type t in types)
        {
            var mInfos = t.GetMethods(BindingFlags.Public | BindingFlags.Instance).Where(x => x.DeclaringType.Equals(t)).ToList();
            foreach (MethodInfo mInfo in mInfos)
                _endpoints.Add((t, mInfo));
        }

        var nonAuthEndPoints = _endpoints.Where(x => !x.IsDefined(typeof(AuthorizeAttribute)) && !x.IsDefined(typeof(AllowAnonymousAttribute)));

        nonAuthEndPoints.Should().BeEmpty();
    }

и это ваш метод испытаний. Это проверит все конечные точки и заставит их иметь AllowAnonymous или Authorize.

В этом примере ваши конечные точки Post1 и Post2 прошли тест, но post3 не прошел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...