{
    "swagger": "2.0",
    "info": {
        "version": "1.0.0",
        "title": "QTI Test REST API",
        "description": "#### The QTI Test REST API. An API for the QTI Test specific actions. For generic CRUD actions on tests please see the taoTest Rest API"
    },
    "schemes": [
        "https",
        "http"
    ],
    "produces": [
        "application/json"
    ],
    "basePath": "/",
    "tags": [
        {
            "name": "test",
            "description": "Operations about tests"
        }
    ],
    "paths": {
        "/taoQtiTest/RestQtiTests/import": {
            "post": {
                "description": "Import a QTI test package into the TAO platform. Available since Tao 3.1.",
                "tags": [
                    "test"
                ],
                "responses": {
                    "200": {
                        "description": "Request was correctly handled, tests were imported",
                        "schema": {
                            "title": "response",
                            "format": "json",
                            "type": "object",
                            "required": [
                                "success",
                                "version",
                                "data"
                            ],
                            "properties": {
                                "success": {
                                    "type": "boolean",
                                    "description": "True on success"
                                },
                                "version": {
                                    "type": "string",
                                    "description": "Tao version"
                                },
                                "data": {
                                    "$ref": "#/definitions/data"
                                }
                            }
                        },
                        "examples": {
                            "application/json": {
                                "success": true,
                                "data": [
                                    {
                                        "testId": "http://tao.local/mytao.rdf#xxxxxxxxxxxxx",
                                        "testItems": [
                                            "http://tao.local/mytao.rdf#xxxxxxxxxxxxx",
                                            "http://tao.local/mytao.rdf#xxxxxxxxxxxxx"
                                        ]
                                    }
                                ],
                                "version": "3.1.0"
                            }
                        }
                    },
                    "400": {
                        "description": "Missing or invalid QTI test package",
                        "examples": {
                            "application/json": {
                                "success": false,
                                "errorCode": 0,
                                "errorMsg": "At least one mandatory parameter was required but found missing in your request",
                                "version": "3.1.0"
                            }
                        },
                        "schema": {
                            "$ref": "#/definitions/errorModel"
                        }
                    },
                    "401": {
                        "description": "You are not authorized to access this functionality"
                    },
                    "500": {
                        "description": "Internal error (should not occur)"
                    }
                },
                "parameters": [
                    {
                        "name": "qtiPackage",
                        "in": "formData",
                        "description": "A QTI 2.1 package",
                        "type": "file",
                        "required": true
                    },
                    {
                        "name": "class-uri",
                        "in": "formData",
                        "description": "Class uri to import test. If not specified root class will be used.",
                        "type": "string",
                        "required": false
                    },
                    {
                        "name": "class-label",
                        "in": "formData",
                        "description": "Label of class to import test. If not specified root class will be used. If label is not unique first match will be used.",
                        "type": "string",
                        "required": false
                    },
                    {
                        "name": "enableMetadataGuardians",
                        "in": "formData",
                        "description": "Boolean flag that indicates to use or not metadata guardians during the import. If parameter not specified, metadata guardians will be used by default.",
                        "type": "boolean",
                        "required": false
                    }
                ],
                "consumes" : [
                    "multipart/form-data"
                ]
            }
        },
        "/taoQtiTest/RestQtiTests/importDeferred": {
            "post": {
                "description": "Import a QTI test package into the TAO platform using task queue. Available since Tao 3.1.",
                "tags": [
                    "test"
                ],
                "responses": {
                    "200": {
                        "description": "Request was correctly handled, task to import test was created",
                        "schema": {
                            "title": "response",
                            "format": "json",
                            "type": "object",
                            "required": [
                                "success",
                                "version",
                                "data"
                            ],
                            "properties": {
                                "success": {
                                    "type": "boolean",
                                    "description": "True on success"
                                },
                                "version": {
                                    "type": "string",
                                    "description": "Tao version"
                                },
                                "data": {
                                    "type": "object",
                                    "properties": {
                                        "reference_id" : {
                                            "type": "string",
                                            "description": "Identifier of the task in the task queue"
                                        }
                                    }
                                }
                            }
                        },
                        "examples": {
                            "application/json": {
                                "success": true,
                                "data": {
                                      "reference_id": "http://tao.local/mytao.rdf#xxxxxxxxxxxxx"
                                },
                                "version": "3.1.0"
                            }
                        }
                    },
                    "400": {
                        "description": "Missing or invalid QTI test package",
                        "examples": {
                            "application/json": {
                                "success": false,
                                "errorCode": 0,
                                "errorMsg": "At least one mandatory parameter was required but found missing in your request",
                                "version": "3.1.0"
                            }
                        },
                        "schema": {
                            "$ref": "#/definitions/errorModel"
                        }
                    },
                    "401": {
                        "description": "You are not authorized to access this functionality"
                    },
                    "500": {
                        "description": "Internal error (should not occur)"
                    }
                },
                "parameters": [
                    {
                        "name": "qtiPackage",
                        "in": "formData",
                        "description": "A QTI 2.1 package",
                        "type": "file",
                        "required": true
                    },
                    {
                        "name": "class-uri",
                        "in": "formData",
                        "description": "Class uri to import test. If not specified root class will be used.",
                        "type": "string",
                        "required": false
                    },
                    {
                        "name": "class-label",
                        "in": "formData",
                        "description": "Label of class to import test. If not specified root class will be used. If label is not unique first match will be used.",
                        "type": "string",
                        "required": false
                    },
                    {
                        "name": "enableMetadataGuardians",
                        "in": "formData",
                        "description": "Boolean flag that indicates to use or not metadata guardians during the import. If parameter not specified, metadata guardians will be used by default.",
                        "type": "boolean",
                        "required": false
                    }
                ],
                "consumes" : [
                    "multipart/form-data"
                ]
            }
        },
        "/taoQtiTest/RestQtiTests/getStatus": {
            "get": {
                "description": "Check status of import test package task. Available since Tao 3.1.",
                "tags": [
                    "test"
                ],
                "responses": {
                    "200": {
                        "description": "Request was correctly handled, task found",
                        "schema": {
                            "title": "response",
                            "format": "json",
                            "type": "object",
                            "required": [
                                "success",
                                "version",
                                "data"
                            ],
                            "properties": {
                                "success": {
                                    "type": "boolean",
                                    "description": "True on success"
                                },
                                "version": {
                                    "type": "string",
                                    "description": "Tao version"
                                },
                                "data": {
                                    "type": "object",
                                    "properties": {
                                        "status" : {
                                            "type": "string",
                                            "description": "Task execution status"
                                        },
                                        "testId" : {
                                            "type": "string",
                                            "description": "Identifier of imported test"
                                        }
                                    }
                                }
                            }
                        },
                        "examples": {
                            "application/json": {
                                "success": true,
                                "data": {
                                      "status": "Success",
                                      "testId": "http://tao.local/mytao.rdf#xxxxxxxxxxxxx"
                                },
                                "version": "3.1.0"
                            }
                        }
                    },
                    "404": {
                        "description": "Task with given id was not found"
                    },
                    "500": {
                        "description": "Internal error (should not occur)"
                    }
                },
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "description": "job reference",
                        "type": "string",
                        "required": true
                    }
                ],
                "consumes" : [
                    "application/x-www-form-urlencoded"
                ]
            }
        },
        "/taoQtiTest/RestQtiTests/createClass": {
          "post": {
              "description": "Create a test class",
              "tags": [
                  "test"
              ],
              "parameters": [
              {
                  "name": "class-label",
                  "in": "formData",
                  "description": "Test class label to create",
                  "required": true,
                  "type": "string"
              },{
                  "name": "parent-class-uri",
                  "in": "formData",
                  "description": "Parent test class uri. If not specified root test class will be used",
                  "required": false,
                  "type": "string"
              },{
                  "name": "class-comment",
                  "in": "formData",
                  "description": "The comment of new created class",
                  "required": false,
                  "type": "string"
              }
          ],
          "consumes" : [
            "multipart/form-data"
          ],
          "responses": {
            "200": {
              "description": "Successful response",
              "schema": {
                "title": "response",
                "format": "json",
                "type": "object",
                "required": [
                  "success",
                  "version"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "description": "false on failure, true on success"
                  },
                  "version": {
                    "type": "string",
                    "description": "tao version"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "message" : {
                        "type": "string",
                        "description": "A message to explain if class is newly created or it already exists"
                      },
                      "class-uri" : {
                        "type": "string",
                        "description": "The uri of newly created test class"
                      }
                    }
                  },
                  "errorCode": {
                    "type": "string",
                    "description": "error code. it appear if success value is false"
                  },
                  "errorMsg": {
                    "type": "string",
                    "description": "error description. it appear if success value is false"
                  }
                }
              },
              "examples": {
                "application/json": {
                  "success": true,
                  "data": {
                    "class-uri": "http://tao.local/mytao.rdf#xxxxxxxxxxxxx"
                  },
                  "version": "3.1.0"
                }
              }
            },
            "400": {
              "description": "Bad request if you send invalid parameters. class-label uri is mandatory.",
              "examples": {
                "application/json": {
                  "success": false,
                  "errorCode": 0,
                  "errorMsg": "At least one mandatory parameter was required but found missing in your request",
                  "version": "3.1.0"
                }
              },
              "schema": {
                "$ref": "#/definitions/errorModel"
              }
            },
            "401": {
              "description": "Unauthorized",
              "examples": {
                "application/json": {
                  "success": false,
                  "errorCode": 0,
                  "errorMsg": "You don't have permission to access this resource.",
                  "version": "3.1.0"
                }
              },
              "schema": {
                "$ref": "#/definitions/errorModel"
              }
            },
            "500": {
              "description": "Internal error, if class-parent-uri is not a valid test class.",
              "examples": {
                "application/json": {
                  "success": false,
                  "errorCode": 0,
                  "errorMsg": "Exception error description",
                  "version": "3.1.0"
                }
              },
              "schema": {
                "$ref": "#/definitions/errorModel"
              }
            }
          }
        }
      }
    },
    "definitions": {
        "errorModel": {
            "type": "object",
            "description": "contain error",
            "required": [
                "success",
                "version",
                "errorCode",
                "errorMsg"
            ],
            "properties": {
                "success": {
                    "type": "boolean",
                    "description": "False on failure",
                    "default": false
                },
                "version": {
                    "type": "string",
                    "description": "Tao version"
                },
                "errorCode": {
                    "type": "integer",
                    "description": "Error code"
                },
                "errorMsg": {
                    "type": "string",
                    "description": "Error description"
                }
            }
        },
        "data": {
            "description": "output user data",
            "type": "array",
            "items": {
                "$ref": "#/definitions/test"
            }
        },
        "test": {
            "type": "object",
            "required": [
                "testId",
                "testItems"
            ],
            "properties": {
                "testId": {
                    "type": "string"
                },
                "testItems": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        }
    },
    "externalDocs": {
        "description": "taoQtiTest on Github",
        "url": "https://github.com/oat-sa/extension-tao-testqti"
    }
}
