2017-04-15 12:26:33 +00:00
import pytest
2017-04-24 17:49:29 +00:00
from mock import patch , ANY , MagicMock
2017-04-15 12:26:33 +00:00
from endpoints . api . test . shared import client_with_identity , conduct_api_call
2017-04-19 16:27:01 +00:00
from endpoints . api . repository import RepositoryTrust , Repository
from features import FeatureNameValue
2017-04-24 17:49:29 +00:00
from test . fixtures import *
2017-04-15 12:26:33 +00:00
INVALID_RESPONSE = {
u ' detail ' : u " u ' invalid_req ' is not of type ' boolean ' " ,
u ' error_message ' : u " u ' invalid_req ' is not of type ' boolean ' " ,
u ' error_type ' : u ' invalid_request ' ,
u ' status ' : 400 ,
u ' title ' : u ' invalid_request ' ,
u ' type ' : u ' http://localhost/api/v1/error/invalid_request '
}
NOT_FOUND_RESPONSE = {
u ' detail ' : u ' Not Found ' ,
u ' error_message ' : u ' Not Found ' ,
u ' error_type ' : u ' not_found ' ,
u ' message ' : u ' You have requested this URI [/api/v1/repository/devtable/repo/changetrust] but did you mean /api/v1/repository/<apirepopath:repository>/changetrust or /api/v1/repository/<apirepopath:repository>/changevisibility or /api/v1/repository/<apirepopath:repository>/tag/<tag>/images ? ' ,
u ' status ' : 404 ,
u ' title ' : u ' not_found ' ,
u ' type ' : u ' http://localhost/api/v1/error/not_found '
}
@pytest.mark.parametrize ( ' trust_enabled,repo_found,expected_body,expected_status ' , [
( True , True , { ' success ' : True } , 200 ) ,
( False , True , { ' success ' : True } , 200 ) ,
( False , False , NOT_FOUND_RESPONSE , 404 ) ,
( ' invalid_req ' , False , INVALID_RESPONSE , 400 ) ,
] )
def test_post_changetrust ( trust_enabled , repo_found , expected_body , expected_status , client ) :
with patch ( ' endpoints.api.repository.tuf_metadata_api ' ) :
with patch ( ' endpoints.api.repository.model ' ) as mock_model :
mock_model . repository . get_repository . return_value = MagicMock ( ) if repo_found else None
with client_with_identity ( ' devtable ' , client ) as cl :
params = { ' repository ' : ' devtable/repo ' }
request_body = { ' trust_enabled ' : trust_enabled }
assert expected_body == conduct_api_call ( cl , RepositoryTrust , ' POST ' , params , request_body , expected_status ) . json
2017-04-19 16:27:01 +00:00
def test_signing_disabled ( client ) :
with patch ( ' features.SIGNING ' , FeatureNameValue ( ' SIGNING ' , False ) ) :
with client_with_identity ( ' devtable ' , client ) as cl :
params = { ' repository ' : ' devtable/simple ' }
response = conduct_api_call ( cl , Repository , ' GET ' , params ) . json
assert not response [ ' trust_enabled ' ]