import test_engine import testsamples import useractions class TestTempRowIds(test_engine.EngineTestCase): def test_temp_row_ids(self): self.load_sample(testsamples.sample_students) out_actions = self.engine.apply_user_actions([useractions.from_repr(ua) for ua in ( # Add a mix of records with or without temp rowIds. ['AddRecord', 'Address', None, {'city': 'A'}], ['AddRecord', 'Address', -1, {'city': 'B'}], ['BulkAddRecord', 'Address', [-3, None, -7, -10], {'city': ['C', 'D', 'E', 'F']}], # -3 translates to C; the new record of -1 applies to a different table, so doesn't affect # its translation to city A. ['AddRecord', 'Schools', -1, {'address': -3, 'name': 'SUNY C'}], # Add a mix of records referring to new, existing, or null rows. ['BulkAddRecord', 'Schools', [None, None, None, None, None], { 'address': [-1, 11, 0, -3, -7], 'name': ['SUNY A', 'NYU', 'Xavier', 'Suny C2', 'Suny E'], } ], # Try a few updates too. ['UpdateRecord', 'Schools', 1, {'address': -7}], ['BulkUpdateRecord', 'Schools', [2, 3, 4], {'address': [-3, -1, 11]}], # Later temp rowIds override previous one. Here, -3 was already used. ['AddRecord', 'Address', -3, {'city': 'G'}], ['AddRecord', 'Schools', None, {'address': -3, 'name': 'SUNY G'}], )]) # Test that we get the correct resulting data. self.assertTableData('Address', cols="subset", data=[ ["id", "city" ], [11, "New York" ], [12, "Colombia" ], [13, "New Haven" ], [14, "West Haven" ], [15, "A"], [16, "B"], # was -1 [17, "C"], # was -3 [18, "D"], [19, "E"], # was -7 [20, "F"], # was -10 [21, "G"], # was -3 ]) self.assertTableData('Schools', cols="subset", data=[ ["id", "name", "address"], [1, "Columbia", 19], [2, "Columbia", 17], [3, "Yale", 16], [4, "Yale", 11], [5, "SUNY C", 17], [6, "SUNY A", 16], [7, "NYU", 11], [8, "Xavier", 0], [9, "Suny C2", 17], [10, "Suny E", 19], [11, "SUNY G", 21], ]) # Test that the actions above got properly translated. # These are same as above, except for the translated rowIds. self.assertPartialOutActions(out_actions, { "stored": [ ['AddRecord', 'Address', 15, {'city': 'A'}], ['AddRecord', 'Address', 16, {'city': 'B'}], ['BulkAddRecord', 'Address', [17, 18, 19, 20], {'city': ['C', 'D', 'E', 'F']}], ['AddRecord', 'Schools', 5, {'address': 17, 'name': 'SUNY C'}], ['BulkAddRecord', 'Schools', [6, 7, 8, 9, 10], { 'address': [16, 11, 0, 17, 19], 'name': ['SUNY A', 'NYU', 'Xavier', 'Suny C2', 'Suny E'], } ], ['UpdateRecord', 'Schools', 1, {'address': 19}], ['BulkUpdateRecord', 'Schools', [2, 3, 4], {'address': [17, 16, 11]}], ['AddRecord', 'Address', 21, {'city': 'G'}], ['AddRecord', 'Schools', 11, {'address': 21, 'name': 'SUNY G'}], # Calculated values (for Students; lookups on schools named "Columbia" and "Yale") ["BulkUpdateRecord", "Students", [1, 2, 3, 4, 6], { "schoolCities": ["E:C", "B:New York", "E:C", "B:New York", "B:New York"]}], ] })