def test_ignore_missing_remote_data(self):
        o = DataAdapter()
        o.add_field('l1', 'r1')
        o.add_field('l2', 'r2')

        local = o.create_local_struct({'r1': -3})
        assert local == {'l1': -3}
    def test_ignore_missing_local_data(self):
        o = DataAdapter()
        o.add_field('l1', 'r1')
        o.add_field('l2', 'r2')

        remote = o.create_remote_struct({'l1': 5})
        assert remote == {'r1': 5}
    def test_can_convert_remote_data(self):
        o = DataAdapter()
        o.add_field('l1', 'r1')
        o.add_field('l2', 'r2')

        local = o.create_local_struct({'r1': -3, 'r2': 4})
        assert local == {'l1': -3, 'l2': 4}
    def test_can_convert_local_data(self):
        o = DataAdapter()
        o.add_field('l1', 'r1')
        o.add_field('l2', 'r2')

        remote = o.create_remote_struct({'l1': 5, 'l2': 3})
        assert remote == {'r1': 5, 'r2': 3}
    def test_create_missing_local_data_as_option(self):
        o = DataAdapter()
        o.create_missing = True
        o.add_field('l1', 'r1')
        o.add_field('l2', 'r2')

        remote = o.create_remote_struct({'l1': 5})
        assert remote == {'r1': 5, 'r2': None}
 def test_names_are_ordered(self):
     o = DataAdapter()
     o.add_field('l5', 'r1')
     o.add_field('l2', 'r2')
     o.add_field('l6', 'r4')
     o.add_field('l4', 'r3')
     assert list(o.local_names) == ['l5', 'l2', 'l6', 'l4']
     assert list(o.remote_names) == ['r1', 'r2', 'r4', 'r3']
    def test_create_missing_remote_data_as_option(self):
        o = DataAdapter()
        o.create_missing = True
        o.add_field('l1', 'r1')
        o.add_field('l2', 'r2')

        local = o.create_local_struct({'r1': -3})
        assert local == {'l1': -3, 'l2': None}
    def test_ignore_extra_local_field(self):
        o = DataAdapter()
        o.add_field('l2', 'r2')

        remote = o.create_remote_struct({'l1': 5, 'l2': 3})
        assert remote == {'r2': 3}
 def test_cannot_duplicate_whole_entry(self):
     o = DataAdapter()
     o.add_field('l', 'r')
     with pytest.raises(KeyError):
         o.add_field('l', 'r')
 def test_cannot_duplicate_local_name(self):
     o = DataAdapter()
     o.add_field('l', 'r1')
     with pytest.raises(KeyError):
         o.add_field('l', 'r2')
 def test_cannot_duplicate_remote_name(self):
     o = DataAdapter()
     o.add_field('l2', 'r')
     with pytest.raises(KeyError):
         o.add_field('l1', 'r')
 def test_cannot_add_empty_remote_name(self):
     o = DataAdapter()
     with pytest.raises(ValueError):
         o.add_field('', 'a')
 def test_can_add_fields(self):
     o = DataAdapter()
     o.add_field('l1', 'r1')
     o.add_field('l2', 'r2')
     assert o._remote_to_local == {'r1': 'l1', 'r2': 'l2'}
     assert o._local_to_remote == {'l1': 'r1', 'l2': 'r2'}
    def test_ignore_extra_remote_field(self):
        o = DataAdapter()
        o.add_field('l2', 'r2')

        local = o.create_local_struct({'r1': -3, 'r2': 4})
        assert local == {'l2': 4}