def test_allow_for_null_created_removed_and_archived_dates():
    dateOne = "2019-12-14T15:01:02.000Z"

    oldJson = {
        "_id": {
            "test_key_a": "test_value_a",
            "test_key_b": "test_value_b"
        },
        "_lastModifiedDateTime": dateOne,
        "createdDateTime": None,
        "_removedDateTime": None,
        "_archivedDateTime": None
    }

    newJson = {
        "_id": {
            "test_key_a": "test_value_a",
            "test_key_b": "test_value_b"
        },
        "_lastModifiedDateTime": {
            "$date": dateOne
        },
        "createdDateTime": None,
        "_removedDateTime": None,
        "_archivedDateTime": None
    }
    actual = wrap_dates(oldJson)
    assert newJson == actual
def test_format_all_wrapped_dates():
    dateOne = "2019-12-14T15:01:02.000+0000"
    dateTwo = "2018-12-14T15:01:02.000+0000"
    dateThree = "2017-12-14T15:01:02.000+0000"
    dateFour = "2016-12-14T15:01:02.000+0000"

    oldJson = {
        "_id": {
            "test_key_a": "test_value_a",
            "test_key_b": "test_value_b"
        },
        "_lastModifiedDateTime": {
            "$date": dateOne
        },
        "createdDateTime": {
            "$date": dateTwo
        },
        "_removedDateTime": {
            "$date": dateThree
        },
        "_archivedDateTime": {
            "$date": dateFour
        }
    }

    formattedDateOne = "2019-12-14T15:01:02.000Z"
    formattedDateTwo = "2018-12-14T15:01:02.000Z"
    formattedDateThree = "2017-12-14T15:01:02.000Z"
    formattedDateFour = "2016-12-14T15:01:02.000Z"

    newJson = {
        "_id": {
            "test_key_a": "test_value_a",
            "test_key_b": "test_value_b"
        },
        "_lastModifiedDateTime": {
            "$date": formattedDateOne
        },
        "createdDateTime": {
            "$date": formattedDateTwo
        },
        "_removedDateTime": {
            "$date": formattedDateThree
        },
        "_archivedDateTime": {
            "$date": formattedDateFour
        }
    }
    actual = wrap_dates(oldJson)
    assert newJson == actual
def test_create_last_modified_if_missing_dates():
    epoch = "1980-01-01T00:00:00.000Z"

    oldJson = {
        "_id": {
            "test_key_a": "test_value_a",
            "test_key_b": "test_value_b"
        }
    }

    newJson = {
        "_id": {
            "test_key_a": "test_value_a",
            "test_key_b": "test_value_b"
        },
        "_lastModifiedDateTime": {
            "$date": epoch
        }
    }
    actual = wrap_dates(oldJson)
    assert newJson == actual
def test_wrap_all_dates():
    date_one = "2019-12-14T15:01:02.000Z"
    date_two = "2018-12-14T15:01:02.000Z"
    date_three = "2017-12-14T15:01:02.000Z"
    date_four = "2016-12-14T15:01:02.000Z"

    old_json = {
        "_id": {
            "test_key_a": "test_value_a",
            "test_key_b": "test_value_b"
        },
        "_lastModifiedDateTime": date_one,
        "createdDateTime": date_two,
        "_removedDateTime": date_three,
        "_archivedDateTime": date_four
    }
    new_json = {
        "_id": {
            "test_key_a": "test_value_a",
            "test_key_b": "test_value_b"
        },
        "_lastModifiedDateTime": {
            "$date": date_one
        },
        "createdDateTime": {
            "$date": date_two
        },
        "_removedDateTime": {
            "$date": date_three
        },
        "_archivedDateTime": {
            "$date": date_four
        }
    }
    # TODO do we need to return  last modified time as tuple
    actual = wrap_dates(old_json)
    assert new_json == actual