################################################################
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
"""aootest.stability: two saves that differ only in the cached value of a date or time field compare equal, and any other
difference does not."""
import zipfile
import pytest
from aootest import stability
pytestmark = pytest.mark.selftest
BODY = 'Hello 07:47:54'
def package(path, content, styles=""):
with zipfile.ZipFile(path, "w") as z:
z.writestr("content.xml", content)
if styles is not None:
z.writestr("styles.xml", styles)
return str(path)
def test_normalize_drops_the_cached_time_and_the_value_attribute():
other = BODY.replace("07:47:54", "07:48:00")
assert stability.normalize(BODY) == stability.normalize(other)
assert "07:47:54" not in stability.normalize(BODY)
def test_two_packages_differing_only_in_a_time_field_compare_equal(tmp_path):
a = package(tmp_path / "a.zip", BODY)
b = package(tmp_path / "b.zip", BODY.replace("07:47:54", "09:00:00"))
assert stability.differing_parts(a, b) == []
@pytest.mark.parametrize("change", [lambda t: t.replace("Hello", "Hullo"), lambda t: t.replace('text:fixed="false"', 'text:fixed="true"'),
lambda t: t.replace("", "")])
def test_any_other_difference_is_reported(tmp_path, change):
a = package(tmp_path / "a.zip", BODY)
b = package(tmp_path / "b.zip", change(BODY))
assert stability.differing_parts(a, b) == ["content.xml"]
def test_a_difference_in_styles_xml_is_reported(tmp_path):
a = package(tmp_path / "a.zip", BODY)
b = package(tmp_path / "b.zip", BODY, "x")
assert stability.differing_parts(a, b) == ["styles.xml"]
def test_a_part_neither_package_has_is_not_compared(tmp_path):
a = package(tmp_path / "a.zip", BODY, None)
b = package(tmp_path / "b.zip", BODY, None)
assert stability.differing_parts(a, b) == []
assert stability.differing_parts(a, package(tmp_path / "c.zip", BODY.replace("Hello", "Hullo"), None)) == ["content.xml"]
def test_a_part_only_one_package_has_is_reported(tmp_path):
a = package(tmp_path / "a.zip", BODY, None)
b = package(tmp_path / "b.zip", BODY)
assert stability.differing_parts(a, b) == ["styles.xml"]
assert stability.differing_parts(b, a) == ["styles.xml"]