deckhand/deckhand/engine
Felipe Monteiro 74528a518d Document replacement: Layering dependency integration
This PS integrates document replacement with document layering. The case
works something like this:

  GIVEN:
  - Parent A
  - Child B
  - Child C

  WHEN:
  - Child B is a replacement for A

  THEN:
  - B must layer with A, then C must layer with B, rather than A,
    as B replaces A.

This is the most basic scenario and there are certainly far more
intricate ones, involving interplay with substitution as well.

To implement this new functionality, relatively minor coding changes
were made, mostly in whether to consider a document's parent or its
parent's replacement while layering, as well as determining the
dependency chain for document sorting.

Unit tests surrounding replacement have been moved into their own files
and a scenario has been added for the case described above. In addition
the same case is tested via a functional test scenario.

The unit tests have been "hardened" to run the layering scenarios twice:
once by passing in the documents in their original order, an order which
is usually written for human maintainability (i.e. B depends on A, so
make the order A followed by B). However, in reality the order of the
documents will be randomized, so every layering unit test is also
run a second time with the documents in reverse order to better ensure
that the dependency chain is resolved correctly.

Change-Id: Ieb058267f3a46b78e899922b6bc5fd726ed15a1b
2018-04-04 10:58:28 -04:00
..
schemas Add functional tests for document replacement 2018-03-28 17:09:40 -04:00
__init__.py Initial engine framework 2017-07-17 20:46:49 +01:00
document_validation.py Document replacement: Update Document unique constraint 2018-03-28 17:08:03 -04:00
layering.py Document replacement: Layering dependency integration 2018-04-04 10:58:28 -04:00
secrets_manager.py Engine implementation for document replacement 2018-03-28 17:09:09 -04:00
utils.py Log all document data following any layering action failure 2018-03-29 10:10:03 -04:00