"""Tests for ows-salessheets history model.""" from datetime import datetime from flexmock import flexmock from sqlalchemy.exc import SQLAlchemyError from salessheets.connectors import mysql from salessheets.constants import errors from salessheets.constants import models from salessheets.constants import salessheets_history from salessheets.models import history def test_get_dict_from_job_object(): """Test getting dict from Job object data.""" user_id = 'oa:1234' upcs = ['123415123', '12315136713'] generation_method = salessheets_history.ALLOWED_GENERATION_METHODS[1] timestamp = datetime.utcnow() expected_result = { 'status': None, 'timestamp': timestamp.isoformat(), 'user_id': user_id, 'output_format': generation_method, 'id': None, 'context': upcs, 'context_type': models.PRODUCT_UPC, } job = history.Job( user_id=user_id, context=upcs, context_type=models.PRODUCT_UPC, output_format=generation_method, timestamp=timestamp) job_dict = job.as_dict() assert job_dict == expected_result def test_update_job(): """Test update job success.""" job = history.Job( job_id=1, user_id=1, output_format=salessheets_history.ALLOWED_GENERATION_METHODS[0], status=salessheets_history.REQUESTED, timestamp=datetime.now(), context=[2]) job.update = flexmock() job_id = 1 query = flexmock( filter_by=lambda job_id: job) session_scope = flexmock( query=lambda data: query) (flexmock(mysql) .should_receive('salessheets_history_session_scope') .and_return(session_scope)) query.should_call('filter_by').once().with_args(job_id=job_id) result = history.update_job(job_id, salessheets_history.COMPLETED) assert result.status == 200 def test_update_job_no_such_job(): """Test updating job by invalid id.""" job_id = 1 query = flexmock( filter_by=lambda job_id: None) session_scope = flexmock( query=lambda data: query) (flexmock(mysql) .should_receive('salessheets_history_session_scope') .and_return(session_scope)) query.should_call('filter_by').once().with_args(job_id=job_id) result = history.update_job(job_id, salessheets_history.COMPLETED) assert result.status == 404 assert result.errors['message'] == errors.JOB_DOES_NOT_EXIST def test_update_job_exception(): """Test update job for exception.""" job_id = 1 (flexmock(mysql) .should_receive('salessheets_history_session_scope') .and_raise(SQLAlchemyError)) result = history.update_job(job_id, salessheets_history.COMPLETED) assert result.status == 400