Add testing helpers for building consistent API payloads.

Review Request #12239 — Created April 19, 2022 and submitted — Latest diff uploaded

Information

RBTools
release-3.x

Reviewers

This is the first in a series of changes designed to solve unit testing
problems in RBTools. Traditionally, unit testing for anything using
rbtools.api (directly or indirectly) has been very difficult, as most
operations require making numerous API calls to compute such state as
API capabilities or repository lists. While we had a couple of helpers
throughout the codebase, they still left most of the work to the
particular unit test.

This change introduces rbtools.testing.api, which is where API-related
testing infrastructure will soon live, and a new
ResourcePayloadFactory class. This is responsible for building:

  1. Object payloads/headers/URLs/etc. for items within a resource tree
    (such as a repository).

  2. Response payloads (for lists/items/errors) representing what would
    be sent to a client.

Going forward, anything that needs to test against part of the API tree
should use this (or suitable wrappers, coming in the next change) to
build up the responses for the API resource classes to consume. This
gives us consistency in what sort of payloads we're testing against.

It's basically equivalent to the sort of testing methods we have
available in Review Board for creating instances of models with
defaults, such as review requests or repositories.

This is currently limited in the types of object payloads/metadata that
can be created. It should evolve over time as testing needs evolve.

Upcoming changes will make use of this to provide a more simple,
consistent mechanism for writing real-world unit tests that perform API
requsts against these payloads.

Tested along with some upcoming changes. Unit tests utilizing the
payloads in this class all succeeded in looking up and getting the
information they needed.

Commits

Files