import unittest
from integrative_systems import *
class IntegrationTests(unittest.TestCase):
 def test_duplicate_equivalence(self):
  v=['A','B','A','C','B','D'];self.assertEqual(pairwise(v),({'A','B'},15));self.assertEqual(seen_duplicates(v),({'A','B'},6));self.assertEqual(v[0],'A')
 def test_boundaries(self):
  for v in [[],['A'],['A','A','A'],['A','B']]:self.assertEqual(pairwise(v)[0],seen_duplicates(v)[0])
 def test_invalid_identifier(self):
  with self.assertRaises(ValueError):pairwise([''])
 def test_amount(self):
  self.assertEqual(amount(0),0)
  for value in [-1,True,1.5,'1']:
   with self.assertRaises(ValueError):amount(value)
 def test_database(self):
  db=database();self.assertEqual(totals(db),[('C1',300),('C2',50)]);db.close()
 def test_foreign_key(self):
  db=database()
  with self.assertRaises(sqlite3.IntegrityError):db.execute('INSERT INTO orders VALUES(?,?,?)',('X','unknown',1))
  db.close()
 def test_retry(self):
  f=RetryFixture();a=f.accept('R1','O1');self.assertEqual(a,f.accept('R1','O1'));self.assertEqual(f.effects,1);f.accept('R2','O2');self.assertEqual(f.effects,2)
 def test_conflict(self):
  f=RetryFixture();f.accept('R1','O1')
  with self.assertRaises(ValueError):f.accept('R1','O2')
  self.assertEqual(f.effects,1)
 def test_copy_and_restart_boundary(self):
  f=RetryFixture();a=f.accept('R1','O1');a['order']='changed';self.assertEqual(f.accept('R1','O1')['order'],'O1');g=RetryFixture();self.assertEqual(g.effects,0)
