def test_setting_the_same_value_marks_field_as_dirty(): """ Check that setting field to the same value marks mutable fields as dirty. However, since the value hasn't changed, these fields won't be saved. """ class FieldTester(XBlock): """Test block for set - get test.""" non_mutable = String(scope=Scope.settings) list_field = List(scope=Scope.settings) dict_field = Dict(scope=Scope.settings) runtime = TestRuntime(services={'field-data': DictFieldData({})}) field_tester = FieldTester(runtime, scope_ids=Mock(spec=ScopeIds)) # precondition checks assert_equals(len(field_tester._dirty_fields), 0) assert_false(field_tester.fields['list_field'].is_set_on(field_tester)) assert_false(field_tester.fields['dict_field'].is_set_on(field_tester)) assert_false(field_tester.fields['non_mutable'].is_set_on(field_tester)) field_tester.non_mutable = field_tester.non_mutable field_tester.list_field = field_tester.list_field field_tester.dict_field = field_tester.dict_field assert_not_in(field_tester.fields['non_mutable'], field_tester._dirty_fields) assert_in(field_tester.fields['list_field'], field_tester._dirty_fields) assert_in(field_tester.fields['dict_field'], field_tester._dirty_fields) assert_false(field_tester.fields['non_mutable'].is_set_on(field_tester)) assert_false(field_tester.fields['list_field'].is_set_on(field_tester)) assert_false(field_tester.fields['dict_field'].is_set_on(field_tester))
def test_twofaced_field_access(): # Check that a field with different to_json and from_json representations # persists and saves correctly. class TwoFacedField(Field): """A field that emits different 'json' than it parses.""" def from_json(self, thestr): """Store an int, the length of the string parsed.""" return len(thestr) def to_json(self, value): """Emit some number of X's.""" return "X" * value class FieldTester(XBlock): """Test block for TwoFacedField.""" how_many = TwoFacedField(scope=Scope.settings) original_json = "YYY" runtime = TestRuntime(services={'field-data': DictFieldData({'how_many': original_json})}) field_tester = FieldTester(runtime, scope_ids=Mock(spec=ScopeIds)) # Test that the native value isn't equal to the original json we specified. assert_not_equals(field_tester.how_many, original_json) # Test that the native -> json value isn't equal to the original json we specified. assert_not_equals(TwoFacedField().to_json(field_tester.how_many), original_json) # The previous accesses will mark the field as dirty (via __get__) assert_equals(len(field_tester._dirty_fields), 1) # However, the field should not ACTUALLY be marked as a field that is needing to be saved. assert_not_in('how_many', field_tester._get_fields_to_save()) # pylint: disable=W0212
def test_twofaced_field_access(): # Check that a field with different to_json and from_json representations # persists and saves correctly. class TwoFacedField(Field): """A field that emits different 'json' than it parses.""" def from_json(self, thestr): """Store an int, the length of the string parsed.""" return len(thestr) def to_json(self, value): """Emit some number of X's.""" return "X" * value class FieldTester(XBlock): """Test block for TwoFacedField.""" how_many = TwoFacedField(scope=Scope.settings) original_json = "YYY" runtime = TestRuntime( services={'field-data': DictFieldData({'how_many': original_json})}) field_tester = FieldTester(runtime, scope_ids=Mock(spec=ScopeIds)) # Test that the native value isn't equal to the original json we specified. assert_not_equals(field_tester.how_many, original_json) # Test that the native -> json value isn't equal to the original json we specified. assert_not_equals(TwoFacedField().to_json(field_tester.how_many), original_json) # The previous accesses will mark the field as dirty (via __get__) assert_equals(len(field_tester._dirty_fields), 1) # However, the field should not ACTUALLY be marked as a field that is needing to be saved. assert_not_in('how_many', field_tester._get_fields_to_save()) # pylint: disable=W0212
def test_twofaced_field_access(): # Check that a field with different to_json and from_json representations # persists and saves correctly. class FieldTester(XBlock): """Test block for TwoFacedField.""" how_many = TwoFacedField(scope=Scope.settings) original_json = "YYY" field_tester = FieldTester(MagicMock(), DictFieldData({'how_many': original_json}), Mock()) # Test that the native value isn't equal to the original json we specified. assert_not_equals(field_tester.how_many, original_json) # Test that the native -> json value isn't equal to the original json we specified. assert_not_equals(TwoFacedField().to_json(field_tester.how_many), original_json) # The previous accesses will mark the field as dirty (via __get__) assert_equals(len(field_tester._dirty_fields), 1) # However, the field should not ACTUALLY be marked as a field that is needing to be saved. assert_not_in('how_many', field_tester._get_fields_to_save()) # pylint: disable=W0212