import unittest
import pickle

from common import MTurkCommon

class TestHITPersistence(MTurkCommon):
	def create_hit_result(self):
		return self.conn.create_hit(
			question=self.get_question(), **self.get_hit_params()
			)

	def test_pickle_hit_result(self):
		result = self.create_hit_result()
		new_result = pickle.loads(pickle.dumps(result))

	def test_pickle_deserialized_version(self):
		"""
		It seems the technique used to store and reload the object must
		result in an equivalent object, or subsequent pickles may fail.
		This tests a double-pickle to elicit that error.
		"""
		result = self.create_hit_result()
		new_result = pickle.loads(pickle.dumps(result))
		pickle.dumps(new_result)

if __name__ == '__main__':
	unittest.main()
