"""Tests for handlers.""" import json from oto import response from ows_product_physical.constant import header from ows_product_physical.logic import product_physical_tracks def test_handler_put_product_tracks_success( client, valid_put_header, valid_put_product_tracks_data, mocker, feature_engine): """Test `PUT /product/{productId}/tracks` handler success state.""" mocker.patch.object( product_physical_tracks, 'update_tracks', return_value=response.Response({}), autospec=True) result = client.put('/product/1234/tracks', headers=valid_put_header, data=json.dumps(valid_put_product_tracks_data)) assert result.status_code == 200 assert product_physical_tracks.update_tracks.called def test_handler_update_product_tracks_success( client, valid_put_header, valid_update_product_tracks_data, mocker, feature_engine): """Test PUT /product/{productId}/tracks handler success state on update.""" mocker.patch.object( product_physical_tracks, 'update_tracks', return_value=response.Response({}), autospec=True) result = client.put('/product/1234/tracks', headers=valid_put_header, data=json.dumps(valid_update_product_tracks_data)) assert result.status_code == 200 assert product_physical_tracks.update_tracks.called def test_handler_update_product_tracks_nullable_fields_success( client, valid_put_header, valid_update_tracks_data_with_nulls, mocker, feature_engine): """Test PUT /product/{productId}/tracks handler success state on update.""" mocker.patch.object( product_physical_tracks, 'update_tracks', return_value=response.Response({}), autospec=True) result = client.put('/product/1234/tracks', headers=valid_put_header, data=json.dumps(valid_update_tracks_data_with_nulls)) assert result.status_code == 200 assert product_physical_tracks.update_tracks.called def test_handler_put_product_tracks_header_error( client, valid_get_header, feature_engine): """Test PUT /product/{productId}/tracks handler fails. Should fail on invalid headers. """ invalid_header = valid_get_header invalid_header[header.GRASS_ACCOUNT_TYPE] = 'banana' result = client.put('/product/1234/tracks', headers=invalid_header) assert result.status_code == 400