Skip to main content

Schul-Cloud Content API

Project description

Build Status Python Package Index

This repository contains

  • a server to test scrapers against

  • tests to test the server

The package works under Python 2 and 3.

Installation

Using pip, you can install all dependencies like this:

pip install schul_cloud_resources_server_tests

When you are done, you can import the package.

import schul_cloud_resources_server_tests

Usage

This section describes how to use the server and the tests.

Server

You can find the API definition. The server serves according to the API. It verifies the input and output for correctness.

To start the server, run

python -m schul_cloud_resources_server_tests.app

The server should appear at http://localhost:8080/v1.

Tests

You always test against the running server. Tests may delete everyting you can reach. If you test the running server, make sure to authenticate in a way that does not destroy the data you want to keep.

python -m schul_cloud_resources_server_tests.tests --url=http://localhost:8080/v1/

http://localhost:8080/v1/ is the default url.

Steps for Implementation

If you want to implement your server you can follow the TDD steps to implement one test after the other.

python -m schul_cloud_resources_server_tests.tests -m step1
python -m schul_cloud_resources_server_tests.tests -m step2
python -m schul_cloud_resources_server_tests.tests -m step3
...
  • step1 runs the first test

  • step2 runs the first and the second test

  • step3 runs the first, second and third test

You can run a single test with

python -m schul_cloud_resources_server_tests.tests -m step3only

Test Authentication

The test server supports api key authentication and basic authentication. If you test authentication over the internet. Use https to protect the secrets. Thus, an example test call to your api could look like this:

python -m schul_cloud_resources_server_tests.tests  \
       --url=https://url.to/your/server               \
       --noauth=false --basic=username:password

If you have an api key, you can test that the server works.

python -m schul_cloud_resources_server_tests.tests   \
       --url=http://url.to/your/server                \
       --noauth=false --apikey=apikey

By default the test server accepts authentication with several credentials

  • no authentication

  • basic:

    • user valid1@schul-cloud.org password 123abc

    • user valid2@schul-cloud.org password supersecure

  • api key: abcdefghijklmn for the user valid1@schul-cloud.org. The client does not send the user name to the server.

To test these, you can add the --basic and --apikey parameters several times to the tests. The --noauth=true parameter is default. If the api only accepts authenticated requests, set --noauth=false.

python -m schul_cloud_resources_server_tests.tests    \
       --basic=valid1@schul-cloud.org:123abc           \
       --basic=valid2@schul-cloud.org:supersecure      \
       --apikey=valid1@schul-cloud.org:abcdefghijklmn  \
       --noauth=true

All tests are run with the different authentication options. If we have several ways to authenticate, the tests test if the user sees the other users’ data.

It is assumed, that adding invalid to the password, user name and api key will make it invalid. Tests use the invalid credentials to test the server behavior in rejected cases.

Example Travis Configuration

If you want to implement a crawler or server, you can use Travis-CI to test it. An example travis configuration can be found in the test-example branch. You can view the output The configuration is generic. It will run under any other language you configure.

Usage in Crawler

The url-crawler uses the test server to test synchronization.

Use the server in pytest

You can use the sever in Python tests. There are fixtures available that start and stop the server.

from schul_cloud_resources_server_tests.tests.fixtures import *

def test_pytest(resources_server):
    """pytest using the server"""

The following attributes are available:

  • resources_server.url The url of the server.

  • resources_server.api A schul_cloud_resources_api_v1.ResourcesApi object connected to the server.

  • resources_server.get_resources() A function to return a list of resources on the server.

For more information, see the module schul_cloud_resources_server_tests.tests.fixtures. You can add support for more test frameworks.

Docker

You can build the this image with the following docker command:

docker build -t schulcloud/schul_cloud_resources_server_tests .

Or you can pull the docker container and run it.

docker run schulcloud/schul_cloud_resources_server_tests

This starts the server at the port 8080 as in the examples above.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

File details

Details for the file schul_cloud_resources_server_tests-1.0.103.tar.gz.

File metadata

File hashes

Hashes for schul_cloud_resources_server_tests-1.0.103.tar.gz
Algorithm Hash digest
SHA256 44412868cc7d1c0acab497c2370528372eefc28aaec4d3be15dc527979ca0373
MD5 515384fb5ce8edfd7f619a0bbadbec4d
BLAKE2b-256 e671a051d00cd1ee1af6e15d22345beffecae1b74c93e5c0264aac8000b965d1

See more details on using hashes here.

File details

Details for the file schul_cloud_resources_server_tests-1.0.103-py3-none-any.whl.

File metadata

File hashes

Hashes for schul_cloud_resources_server_tests-1.0.103-py3-none-any.whl
Algorithm Hash digest
SHA256 4c07fbbeb1d5ef2b33e78597da04166c4770f4d1907d8bbe140028c83fa74363
MD5 68665269e6c654a3892c8a8434d6d8bf
BLAKE2b-256 e205efec01743ca9eb5138b6b1dd58d8fb4527993d5418660a44acce22da7178

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page