class TestResultPublisher(unittest.TestCase):
    def setUp(self):
        self.logger = logging.getLogger(__name__)

        # Load ledger base url from configuration
        parser = SafeConfigParser()
        parser.read('load.ini')
        baseUrl = parser.get('general', 'host')

        # Initialize ledger api client
        self.ledgerApi = LedgerApi(baseUrl)

        with open('tests/resources/fingerprint_template.json','r') as fingerprint_template_file:
            fingerprint_template = fingerprint_template_file.read()
        with open('tests/resources/vote_template.json','r') as vote_template_file:
            vote_template = vote_template_file.read()

        voteBase64 = b64encode(vote_template)

        self.testFingerprint = fingerprint_template % voteBase64

        self.username = faker.email()
        self.password = "******"
        self.journalId = self.setupJournal(self.username, self.password)

    def setupJournal(self, username, password):
        session = self.ledgerApi.createUser(username, password)

        journalId = self.ledgerApi.createJournal(session, faker.name())

        recordId = self.ledgerApi.createRecord(session)
        self.ledgerApi.saveRecordFingerprint(session, recordId, self.testFingerprint)
        self.ledgerApi.commitRecord(session, journalId, recordId)

        # Uncomment next line if need to timestamp (create a transaction in blockchain)
        self.ledgerApi.timestampJournal(session, journalId)

        return journalId

    def test_publish_results(self):
        publish_results(self.username, self.password, self.journalId)
        self.assertTrue(True)
    def test_all(self):
        logger = logging.getLogger(__name__)

        # Load ledger base url from configuration
        parser = SafeConfigParser()
        parser.read('load.ini')

        baseUrl = parser.get('general', 'host')
        username = parser.get('general', 'username')
        password = parser.get('general', 'password')

        # Initialize ledger api client
        ledgerApi = LedgerApi(baseUrl)

        with open('tests/resources/fingerprint_template.json', 'r') as fingerprint_template_file:
            fingerprint_template = fingerprint_template_file.read()
        with open('tests/resources/vote_template.json', 'r') as vote_template_file:
            vote_template = vote_template_file.read()

        vote = vote_template
        voteBase64 = b64encode(vote)

        fingerprint = fingerprint_template % voteBase64

        session = ledgerApi.authenticateUser(username, password)

        journalId = ledgerApi.createJournal(session, faker.name())

        recordId = ledgerApi.createRecord(session)

        ledgerApi.saveRecordFingerprint(session, recordId, fingerprint)
        ledgerApi.commitRecord(session, journalId, recordId)

        # Uncomment next line if need to timestamp (create a transaction in blockchain)
        ledgerApi.timestampJournal(session, journalId)

        print journalId

        self.assertTrue(True)
username = faker.email()
password = "******"

AL_AUTH = ledgerApi.createUser(username, password)

# save user info to config
parser.set('general', 'auth', AL_AUTH)
parser.set('general', 'username', username)
parser.set('general', 'password', password)

logger.debug('User created.')

"""

Create journal

"""

logger.debug('Starting creating a journal')

AL_JOURNAL = ledgerApi.createJournal(AL_AUTH, faker.name())

# save journal info to cinfig
parser.set('general', 'journal', AL_JOURNAL)

logger.debug('Journal created.')

# Saving configuration
with open('load.ini', 'w') as configfile:
    parser.write(configfile)