def test_non_default_param_description(self):
     description = 'This is a custom description'
     self.param = AutoPopulatedParam(self.name, description)
     section = self.doc_structure.add_new_section(self.name)
     section.add_new_section('param-documentation')
     self.param.document_auto_populated_param('docs.request-params',
                                              self.doc_structure)
     self.assert_contains_line(description)
    ('before-parameter-build.s3.HeadObject', sse_md5),
    ('before-parameter-build.s3.GetObject', sse_md5),
    ('before-parameter-build.s3.PutObject', sse_md5),
    ('before-parameter-build.s3.CopyObject', sse_md5),
    ('before-parameter-build.s3.CopyObject', copy_source_sse_md5),
    ('before-parameter-build.s3.CreateMultipartUpload', sse_md5),
    ('before-parameter-build.s3.UploadPart', sse_md5),
    ('before-parameter-build.s3.UploadPartCopy', sse_md5),
    ('before-parameter-build.s3.UploadPartCopy', copy_source_sse_md5),
    ('before-parameter-build.ec2.RunInstances', base64_encode_user_data),
    ('after-call.s3.ListObjects', decode_list_object),
    ('after-call.s3.ListObjectsV2', decode_list_object_v2),

    # S3 SSE documentation modifications
    ('docs.*.s3.*.complete-section',
     AutoPopulatedParam('SSECustomerKeyMD5').document_auto_populated_param),
    # S3 SSE Copy Source documentation modifications
    ('docs.*.s3.*.complete-section',
     AutoPopulatedParam(
         'CopySourceSSECustomerKeyMD5').document_auto_populated_param),
    # The following S3 operations cannot actually accept a ContentMD5
    ('docs.*.s3.*.complete-section',
     HideParamFromOperations('s3', 'ContentMD5', [
         'DeleteObjects', 'PutBucketAcl', 'PutBucketCors',
         'PutBucketLifecycle', 'PutBucketLogging', 'PutBucketNotification',
         'PutBucketPolicy', 'PutBucketReplication', 'PutBucketRequestPayment',
         'PutBucketTagging', 'PutBucketVersioning', 'PutBucketWebsite',
         'PutObjectAcl'
     ]).hide_param)
]
_add_parameter_aliases(BUILTIN_HANDLERS)
 def setUp(self):
     super(TestAutopopulatedParam, self).setUp()
     self.name = 'MyMember'
     self.param = AutoPopulatedParam(self.name)
class TestAutopopulatedParam(BaseDocsTest):
    def setUp(self):
        super(TestAutopopulatedParam, self).setUp()
        self.name = 'MyMember'
        self.param = AutoPopulatedParam(self.name)

    def test_request_param_not_required(self):
        section = self.doc_structure.add_new_section(self.name)
        section.add_new_section('param-documentation')
        self.param.document_auto_populated_param('docs.request-params',
                                                 self.doc_structure)
        self.assert_contains_line('this parameter is automatically populated')

    def test_request_param_required(self):
        section = self.doc_structure.add_new_section(self.name)
        is_required_section = section.add_new_section('is-required')
        section.add_new_section('param-documentation')
        is_required_section.write('**[REQUIRED]**')
        self.param.document_auto_populated_param('docs.request-params',
                                                 self.doc_structure)
        self.assert_not_contains_line('**[REQUIRED]**')
        self.assert_contains_line('this parameter is automatically populated')

    def test_non_default_param_description(self):
        description = 'This is a custom description'
        self.param = AutoPopulatedParam(self.name, description)
        section = self.doc_structure.add_new_section(self.name)
        section.add_new_section('param-documentation')
        self.param.document_auto_populated_param('docs.request-params',
                                                 self.doc_structure)
        self.assert_contains_line(description)

    def test_request_example(self):
        top_section = self.doc_structure.add_new_section('structure-value')
        section = top_section.add_new_section(self.name)
        example = 'MyMember: \'string\''
        section.write(example)
        self.assert_contains_line(example)
        self.param.document_auto_populated_param('docs.request-example',
                                                 self.doc_structure)
        self.assert_not_contains_line(example)

    def test_param_not_in_section_request_param(self):
        self.doc_structure.add_new_section('Foo')
        self.param.document_auto_populated_param('docs.request-params',
                                                 self.doc_structure)
        self.assertEqual('',
                         self.doc_structure.flush_structure().decode('utf-8'))

    def test_param_not_in_section_request_example(self):
        top_section = self.doc_structure.add_new_section('structure-value')
        section = top_section.add_new_section('Foo')
        example = 'Foo: \'string\''
        section.write(example)
        self.assert_contains_line(example)
        self.param.document_auto_populated_param('docs.request-example',
                                                 self.doc_structure)
        self.assert_contains_line(example)