         }
     }
     
-    static func testAuthentication<T>(scopes: [Scope] = [], request: @escaping (Gramophone, @escaping ((APIResult<T>) -> ())) -> ()) {
+    static func testAuthentication<T: Decodable>(scopes: [Scope] = [], request: @escaping (Gramophone, @escaping ((APIResult<T>) -> ())) -> ()) {
         let gramophone = TestingUtilities.unauthenticatedGramophone(withScopes: scopes)
         waitUntil { done in
             request(gramophone) { result in

        }
    }
    
    static func testSuccessfulRequestWithDataConfirmation<T>(httpCode: UInt, scopes: [Scope] = [], requireMeta: Bool = true,
                                                          request: @escaping (Gramophone, @escaping ((APIResult<T>, (T) -> ()) -> ())) -> ()) {
        
        let gramophone = TestingUtilities.authenticatedGramophone(withScopes: scopes)

        return Gramophone(client: client)
    }
    
    static func testScopes<T: Decodable>(scopes: [Scope], request: @escaping (Gramophone, @escaping ((APIResult<T>) -> ())) -> ()) {
        let gramophone = TestingUtilities.authenticatedGramophone(withScopes: [])
        waitUntil { done in
            request(gramophone) { result in
