def test_package_saving():
    obj1 = mock.Mock()
    obj2 = mock.Mock()
    obj3 = mock.Mock()
    data = {'items': [{'type': 'photo', 'object': obj2, 'foo': 'bar'},
                      {'type': 'video', 'object': obj3, 'foo': 'baz'}]}
                      
    with patch_storymarket() as (mock_api, mock_marked):
        utils.save_to_storymarket(obj1, 'package', data)
        
        sm = mock_api.return_value
        sm.photos.create.assert_called_with({'foo': 'bar'})
        sm.video.create.assert_called_with({'foo': 'baz'})
        
        sm.packages.create.assert_called_with({
            'photo_items': [mock_marked.return_value.storymarket_id],
            'video_items': [mock_marked.return_value.storymarket_id]
        })
def test_save_to_storymarket():
    obj = mock.Mock()
    data = {'hi': 'there', 'blob': '...'}

    with patch_storymarket() as (mock_api, mock_marked):
        utils.save_to_storymarket(obj, 'audio', data)
        
        # The call creates and API instance...
        mock_api.assert_called_with(settings.STORYMARKET_API_KEY)
        
        # Calls that instance's text.create() method...
        sm = mock_api.return_value
        sm.audio.create.assert_called_with({'hi': 'there'})
        
        # Uploads the blob using thr object returned by create()...
        create_rv = sm.audio.create.return_value
        create_rv.upload_blob.assert_called_with('...')
        
        # And calls mark_synced.
        mock_marked.assert_called_with(obj, create_rv)