• E
    Handle Content-Types that are not :json, :xml, or :url_encoded_form · 43d7a03a
    eileencodes 提交于
    In c546a2b0 this was changed to mimic how the browser behaves in a real
    situation but left out types that were registered.
    
    When this was changed it didn't take `text/plain` or `text/html` content
    types into account. This is a problem if you're manipulating the
    `Content-Type` headers in your controller tests, and expect a certain
    result.
    
    The reason I changed this to use `to_sym` is because if the
    `Content-Type` is not registered then the symbol will not exist. If it's
    one of the special types we handle that specifically (:json, :xml, or
    :url_encoded_form). If it's any registered type we handle it by setting
    the `path_parameters` and then the `request_parameters`. If the `to_sym`
    returns nil an error will be thrown.
    
    If the controller test sets a `Content-Type` on the request that `Content-Type`
    should remain in the header and pass along the filename.
    
    For example:
    If a test sets a content type on a post
    ```
    @request.headers['CONTENT_TYPE'] = 'text/plain'
    post :create, params: { name: 'foo.txt' }
    ```
    
    Then `foo.txt` should be in the `request_parameters` and params related
    to the path should be in the `path_parameters` and the `Content-Type`
    header should match the one set in the `@request`. When c546a2b0 was
    committed `text/plain` and `text/html` types were throwing a "Unknown
    Content-Type" error which is misleading and incorrect.
    
    Note: this does not affect how this is handled in the browser, just how
    the controller tests handle setting `Content-Type`.
    43d7a03a
test_case.rb 21.7 KB