From 873c3629963780ee188160f3b5cacb2da6aeadd1 Mon Sep 17 00:00:00 2001 From: flytoj2ee Date: Wed, 31 Dec 2014 20:22:46 +0800 Subject: [PATCH] TC API - Get Rounds API --- actions/rounds.js | 426 ++++++++++++++++++ apiary.apib | 357 +++++++++++++++ queries/get_data_round_type_lu | 4 + queries/get_data_round_type_lu.json | 5 + queries/get_round_terms_by_ids | 1 + queries/get_round_terms_by_ids.json | 5 + queries/get_rounds | 124 +++++ queries/get_rounds.json | 5 + queries/get_rounds_count | 23 + queries/get_rounds_count.json | 5 + routes.js | 9 +- test/sqls/rounds/informixoltp__clean | 4 + .../rounds/informixoltp__insert_test_data | 62 +++ test/test.rounds.js | 359 +++++++++++++++ .../rounds/expected_default_parameters.json | 308 +++++++++++++ .../rounds/expected_full_parameters.json | 62 +++ .../rounds/expected_name_parameters.json | 308 +++++++++++++ .../expected_pagination_parameters.json | 97 ++++ .../rounds/expected_sort_parameters.json | 308 +++++++++++++ .../rounds/expected_status_parameters.json | 308 +++++++++++++ .../rounds/expected_time_parameters.json | 43 ++ .../rounds/expected_type_parameters.json | 62 +++ 22 files changed, 2882 insertions(+), 3 deletions(-) create mode 100644 actions/rounds.js create mode 100644 queries/get_data_round_type_lu create mode 100644 queries/get_data_round_type_lu.json create mode 100644 queries/get_round_terms_by_ids create mode 100644 queries/get_round_terms_by_ids.json create mode 100644 queries/get_rounds create mode 100644 queries/get_rounds.json create mode 100644 queries/get_rounds_count create mode 100644 queries/get_rounds_count.json create mode 100644 test/sqls/rounds/informixoltp__clean create mode 100644 test/sqls/rounds/informixoltp__insert_test_data create mode 100644 test/test.rounds.js create mode 100644 test/test_files/rounds/expected_default_parameters.json create mode 100644 test/test_files/rounds/expected_full_parameters.json create mode 100644 test/test_files/rounds/expected_name_parameters.json create mode 100644 test/test_files/rounds/expected_pagination_parameters.json create mode 100644 test/test_files/rounds/expected_sort_parameters.json create mode 100644 test/test_files/rounds/expected_status_parameters.json create mode 100644 test/test_files/rounds/expected_time_parameters.json create mode 100644 test/test_files/rounds/expected_type_parameters.json diff --git a/actions/rounds.js b/actions/rounds.js new file mode 100644 index 000000000..141d38d54 --- /dev/null +++ b/actions/rounds.js @@ -0,0 +1,426 @@ +/* + * Copyright (C) 2014 TopCoder Inc., All Rights Reserved. + */ +/** + * Implement the get rounds api. + * + * @version 1.0 + * @author TCASSEMBLER + */ +/*jslint node: true, nomen: true, plusplus: true, stupid: true, unparam: true */ +"use strict"; +var async = require('async'); +var _ = require('underscore'); +var moment = require('moment'); +var IllegalArgumentError = require('../errors/IllegalArgumentError'); +/** + * The output date format. + * @type {string} the date format + */ +var OUTPUT_DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSZ'; +/** + * The input date format. + * @type {string} the date format. + */ +var INPUT_DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss'; + +// the filter columns +var FILTER_COLUMNS = [ + "name", + "type", + "status" +]; + +// the time filter columns +var TIME_FILTER_COLUMNS = [ + "registrationPhaseStartTimeFrom", + "registrationPhaseStartTimeTo", + "registrationPhaseEndTimeFrom", + "registrationPhaseEndTimeTo", + "codingPhaseStartTimeFrom", + "codingPhaseStartTimeTo", + "codingPhaseEndTimeFrom", + "codingPhaseEndTimeTo", + "intermissionPhaseStartTimeFrom", + "intermissionPhaseStartTimeTo", + "intermissionPhaseEndTimeFrom", + "intermissionPhaseEndTimeTo", + "challengePhaseStartTimeFrom", + "challengePhaseStartTimeTo", + "challengePhaseEndTimeFrom", + "challengePhaseEndTimeTo", + "systemTestPhaseStartTimeFrom", + "systemTestPhaseStartTimeTo", + "systemTestPhaseEndTimeFrom", + "systemTestPhaseEndTimeTo", + "roomAssignmentPhaseStartTimeFrom", + "roomAssignmentPhaseStartTimeTo", + "roomAssignmentPhaseEndTimeFrom", + "roomAssignmentPhaseEndTimeTo", + "moderatedChatPhaseStartTimeFrom", + "moderatedChatPhaseStartTimeTo", + "moderatedChatPhaseEndTimeFrom", + "moderatedChatPhaseEndTimeTo" +]; + +// the sort columns +var SORT_COLUMNS = { + "registrationPhaseStartTime": "start_time_1", + "registrationPhaseEndTime": "end_time_1", + "codingPhaseStartTime": "start_time_2", + "codingPhaseEndTime": "end_time_2", + "intermissionPhaseStartTime": "start_time_3", + "intermissionPhaseEndTime": "end_time_3", + "challengePhaseStartTime": "start_time_4", + "challengePhaseEndTime": "end_time_4", + "systemTestPhaseStartTime": "start_time_5", + "systemTestPhaseEndTime": "end_time_5", + "roomAssignmentPhaseStartTime": "start_time_7", + "roomAssignmentPhaseEndTime": "end_time_7", + "moderatedChatPhaseStartTime": "start_time_6", + "moderatedChatPhaseEndTime": "end_time_6" +}; + +/** + * Get sort column database name. + * @param name the sort name + * @returns {*} the converted name + */ +function getSortColumnDBName(name) { + var keys = Object.keys(SORT_COLUMNS), i; + for (i = 0; i < keys.length; i++) { + if (keys[i].toLowerCase() === name.toLowerCase()) { + return SORT_COLUMNS[keys[i]]; + } + } + + return 'start_time_1'; +} + +/** + * Validate time filters. + * @param params the parameters instance + * @param error the error instance + * @param start the start time filter key + * @param end the end time filter key + * @returns {*} the checked result + */ +function validateTimeGroup(params, error, start, end) { + if (!error && _.isDefined(params[start]) && _.isDefined(params[end])) { + if (moment(decodeURIComponent(params[start]), INPUT_DATE_FORMAT) + .isAfter(moment(decodeURIComponent(params[end]), INPUT_DATE_FORMAT))) { + error = new IllegalArgumentError(start + ' should not be later than ' + end + '.'); + } + } + return error; +} + +/** + * Checks whether the time filter is invalid date format. + * @param params the parameters instance + * @param error the error instance + * @param helper the helper instance + * @returns {*} the checked result + */ +function validateTimeFilter(params, error, helper) { + var i; + for (i = 0; i < TIME_FILTER_COLUMNS.length; i++) { + if (_.isDefined(params[TIME_FILTER_COLUMNS[i]]) && !error) { + error = helper.validateDate(decodeURIComponent(params[TIME_FILTER_COLUMNS[i]]), + TIME_FILTER_COLUMNS[i], INPUT_DATE_FORMAT); + } + if (error) { + break; + } + } + + error = validateTimeGroup(params, error, 'registrationPhaseStartTimeFrom', 'registrationPhaseStartTimeTo'); + error = validateTimeGroup(params, error, 'registrationPhaseEndTimeFrom', 'registrationPhaseEndTimeTo'); + error = validateTimeGroup(params, error, 'codingPhaseStartTimeFrom', 'codingPhaseStartTimeTo'); + error = validateTimeGroup(params, error, 'codingPhaseEndTimeFrom', 'codingPhaseEndTimeTo'); + error = validateTimeGroup(params, error, 'intermissionPhaseStartTimeFrom', 'intermissionPhaseStartTimeTo'); + error = validateTimeGroup(params, error, 'intermissionPhaseEndTimeFrom', 'intermissionPhaseEndTimeTo'); + error = validateTimeGroup(params, error, 'challengePhaseStartTimeFrom', 'challengePhaseStartTimeTo'); + error = validateTimeGroup(params, error, 'challengePhaseEndTimeFrom', 'challengePhaseEndTimeTo'); + error = validateTimeGroup(params, error, 'systemTestPhaseStartTimeFrom', 'systemTestPhaseStartTimeTo'); + error = validateTimeGroup(params, error, 'systemTestPhaseEndTimeFrom', 'systemTestPhaseEndTimeTo'); + error = validateTimeGroup(params, error, 'roomAssignmentPhaseStartTimeFrom', 'roomAssignmentPhaseStartTimeTo'); + error = validateTimeGroup(params, error, 'roomAssignmentPhaseEndTimeFrom', 'roomAssignmentPhaseEndTimeTo'); + error = validateTimeGroup(params, error, 'moderatedChatPhaseStartTimeFrom', 'moderatedChatPhaseStartTimeTo'); + error = validateTimeGroup(params, error, 'moderatedChatPhaseEndTimeFrom', 'moderatedChatPhaseEndTimeTo'); + + return error; +} + +/** + * Get time filter in sql format. + * @param params the parameters instance + * @returns {string} the sql statement + */ +function getTimeFilter(params) { + var sql = '', type = '', time = '', rs, i; + for (i = 0; i < TIME_FILTER_COLUMNS.length; i++) { + if (_.isDefined(params[TIME_FILTER_COLUMNS[i]])) { + if (TIME_FILTER_COLUMNS[i].indexOf('From') !== -1) { + type = '>'; + } else { + type = '<'; + } + + if (TIME_FILTER_COLUMNS[i].indexOf('StartTime') !== -1) { + time = 'start_time'; + } else { + time = 'end_time'; + } + + if (TIME_FILTER_COLUMNS[i].indexOf('registrationPhase') !== -1) { + rs = 'rs1'; + } else if (TIME_FILTER_COLUMNS[i].indexOf('codingPhase') !== -1) { + rs = 'rs2'; + } else if (TIME_FILTER_COLUMNS[i].indexOf('intermissionPhase') !== -1) { + rs = 'rs3'; + } else if (TIME_FILTER_COLUMNS[i].indexOf('challengePhase') !== -1) { + rs = 'rs4'; + } else if (TIME_FILTER_COLUMNS[i].indexOf('systemTestPhase') !== -1) { + rs = 'rs5'; + } else if (TIME_FILTER_COLUMNS[i].indexOf('moderatedChatPhase') !== -1) { + rs = 'rs6'; + } else if (TIME_FILTER_COLUMNS[i].indexOf('roomAssignmentPhase') !== -1) { + rs = 'rs7'; + } + sql = sql + ' AND ' + rs + '.' + time + ' ' + type + ' "' + decodeURIComponent(params[TIME_FILTER_COLUMNS[i]]) + '"'; + } + } + + return sql; +} +/** + * Get rounds from database. + * @param api the api instance + * @param connection the database connection + * @param dbConnectionMap the connection map + * @param next the callback method + */ +var getRounds = function (api, connection, dbConnectionMap, next) { + var helper = api.helper, sqlParams, + result = {}, params = connection.params, pageIndex, pageSize, sortColumn, + sortOrder, error, filterCondition, statusCondition = '', allowedSort, + data = [], statuses, allowedStatus, tmp, i, tmpTypeId; + + sortOrder = (params.sortOrder || "asc").toLowerCase(); + sortColumn = (params.sortColumn || "registrationPhaseStartTime").toLowerCase(); + pageIndex = Number(params.pageIndex || 1); + pageSize = Number(params.pageSize || 50); + + async.waterfall([ + function (cb) { + cb(helper.checkAdmin(connection, 'Authorized information needed.', 'Admin access only.')); + }, function (cb) { + allowedSort = helper.getLowerCaseList(Object.keys(SORT_COLUMNS)); + if (_.isDefined(params.pageIndex) && pageIndex !== -1) { + if (!_.isDefined(params.pageSize)) { + error = new IllegalArgumentError('pageSize should not be null or undefined if pageIndex is provided.'); + } + } + error = error || + helper.checkMaxNumber(pageSize, helper.MAX_INT, "pageSize") || + helper.checkPageIndex(pageIndex, "pageIndex") || + helper.checkPositiveInteger(pageSize, "pageSize") || + helper.checkContains(["asc", "desc"], sortOrder, "sortOrder") || + helper.checkContains(allowedSort, sortColumn, "sortColumn"); + + // check status filter + if (_.isDefined(params.status) && !error) { + statuses = params.status.split(','); + allowedStatus = ['active', 'past', 'draft']; + tmp = ''; + for (i = 0; i < statuses.length; i++) { + error = helper.checkContains(allowedStatus, statuses[i].toLowerCase(), "status"); + if (error) { + break; + } + if (statuses[i].toLowerCase() === 'active') { + tmp = 'a'; + } else if (statuses[i].toLowerCase() === 'past') { + tmp = 'p'; + } else if (statuses[i].toLowerCase() === 'draft') { + tmp = 'f'; + } + statusCondition = statusCondition + '"' + tmp + '"'; + if (i !== (statuses.length - 1)) { + statusCondition = statusCondition + ','; + } + } + } + + error = validateTimeFilter(params, error, helper); + + if (error) { + cb(error); + return; + } + if (_.isDefined(params.type)) { + // check type filter + helper.getCatalogCachedValue(decodeURIComponent(params.type).split(','), dbConnectionMap, 'round_type_lu', cb); + } else { + cb(null, null); + } + }, function (typeIds, cb) { + if (pageIndex === -1) { + pageIndex = 1; + pageSize = helper.MAX_INT; + } + + filterCondition = ' 1=1 '; + if (_.isDefined(params.name)) { + // set name filter + filterCondition = filterCondition + ' AND LOWER(name) LIKE LOWER("%' + decodeURIComponent(params.name) + '%")'; + } + + if (statusCondition !== '') { + // set status filter + filterCondition = filterCondition + ' AND LOWER(r.status) IN (' + statusCondition + ')'; + } + + // set phase time filters + filterCondition = filterCondition + getTimeFilter(params); + + if (typeIds !== null) { + tmpTypeId = ''; + for (i = 0; i < typeIds.length; i++) { + tmpTypeId = tmpTypeId + typeIds[i]; + if (i !== typeIds.length - 1) { + tmpTypeId = tmpTypeId + ','; + } + } + // set type filter + filterCondition = filterCondition + ' AND r.round_type_id IN (' + tmpTypeId + ')'; + } + + sqlParams = { + firstRowIndex: (pageIndex - 1) * pageSize, + pageSize: pageSize, + filterCondition: filterCondition, + sortColumn: getSortColumnDBName(sortColumn), + sortOrder: sortOrder + }; + + // query database to get result + async.parallel({ + count: function (cbx) { + api.dataAccess.executeQuery("get_rounds_count", + sqlParams, + dbConnectionMap, + cbx); + }, + rounds: function (cbx) { + api.dataAccess.executeQuery("get_rounds", + sqlParams, + dbConnectionMap, + cbx); + } + }, cb); + }, function (results, cb) { + var total = results.count[0].total_count, rounds = results.rounds, idStr = '', record, j; + + result = { + total: total, + pageIndex: pageIndex, + pageSize: Number(params.pageIndex) === -1 ? total : pageSize + }; + + for (i = 0; i < rounds.length; i++) { + idStr = idStr + rounds[i].id; + if (i !== (rounds.length - 1)) { + idStr = idStr + ','; + } + + record = { + "id": rounds[i].id, + "name": rounds[i].name, + "shortName": rounds[i].short_name, + "type": rounds[i].round_type_desc, + "status": rounds[i].round_status ? rounds[i].round_status.trim() : rounds[i].round_status, + "registrationLimit": rounds[i].registration_limit, + "invitationalType": rounds[i].invitational ? rounds[i].invitational.trim() : rounds[i].invitational, + "region": rounds[i].region_name, + "roundSchedule": [] + }; + + for (j = 1; j <= 7; j++) { + if (!_.isUndefined(rounds[i]["start_time_" + j]) + && !_.isUndefined(rounds[i]["end_time_" + j]) + && !_.isUndefined(rounds[i]["status_" + j])) { + record["roundSchedule"].push({ + "phaseName": rounds[i]["name_" + j], + "startTime": rounds[i]["start_time_" + j] ? moment(rounds[i]["start_time_" + j]).format(OUTPUT_DATE_FORMAT) : undefined, + "endTime": rounds[i]["end_time_" + j] ? moment(rounds[i]["end_time_" + j]).format(OUTPUT_DATE_FORMAT) : undefined, + "status": rounds[i]["status_" + j] ? rounds[i]["status_" + j].trim() : rounds[i]["status_" + j] + }); + } + } + data.push(record); + } + + if (idStr !== '') { + sqlParams.roundIdList = idStr; + // get round terms + api.dataAccess.executeQuery("get_round_terms_by_ids", + sqlParams, + dbConnectionMap, + cb); + } else { + cb(null, null); + } + }, function (results, cb) { + var j; + if (results !== null) { + for (i = 0; i < results.length; i++) { + for (j = 0; j < data.length; j++) { + // only return the first term + if (results[i].round_id === data[j].id && !data[j]["roundTerms"]) { + data[j]["roundTerms"] = results[i].terms_content; + break; + } + } + } + } + + result.data = data; + cb(); + } + ], function (err) { + if (err) { + helper.handleError(api, connection, err); + } else { + connection.response = result; + } + next(connection, true); + }); +}; + + +/** + * The API for get Rounds API. + */ +exports.getRounds = { + name: "getRounds", + description: "Get Rounds", + inputs: { + required: [], + optional: ["pageSize", "pageIndex", "sortColumn", "sortOrder"].concat(FILTER_COLUMNS).concat(TIME_FILTER_COLUMNS) + }, + blockedConnectionTypes: [], + outputExample: {}, + version: 'v2', + transaction: 'read', + databases: ["informixoltp"], + run: function (api, connection, next) { + if (connection.dbConnectionMap) { + api.log("Execute getRounds#run", 'debug'); + getRounds(api, connection, connection.dbConnectionMap, next); + } else { + api.helper.handleNoConnection(api, connection, next); + } + } +}; diff --git a/apiary.apib b/apiary.apib index 63b241faf..b098a340f 100644 --- a/apiary.apib +++ b/apiary.apib @@ -15292,3 +15292,360 @@ Source Code Image Generation APIs "value":"503", "description":"Servers are up but overloaded. Try again later." } + + +## Get Rounds [/data/rounds?pageSize={pageSize}&pageIndex={pageIndex}&sortColumn={sortColumn}&sortOrder={sortOrder}&name={name}&type={type}&status={status}®istrationPhaseStartTimeFrom={registrationPhaseStartTimeFrom}®istrationPhaseStartTimeTo={registrationPhaseStartTimeTo}®istrationPhaseEndTimeFrom={registrationPhaseEndTimeFrom}®istrationPhaseEndTimeTo={registrationPhaseEndTimeTo}&codingPhaseStartTimeFrom={codingPhaseStartTimeFrom}&codingPhaseStartTimeTo={codingPhaseStartTimeTo}&codingPhaseEndTimeFrom={codingPhaseEndTimeFrom}&codingPhaseEndTimeTo={codingPhaseEndTimeTo}&intermissionPhaseStartTimeFrom={intermissionPhaseStartTimeFrom}&intermissionPhaseStartTimeTo={intermissionPhaseStartTimeTo}&intermissionPhaseEndTimeFrom={intermissionPhaseEndTimeFrom}&intermissionPhaseEndTimeTo={intermissionPhaseEndTimeTo}&challengePhaseStartTimeFrom={challengePhaseStartTimeFrom}&challengePhaseStartTimeTo={challengePhaseStartTimeTo}&challengePhaseEndTimeFrom={challengePhaseEndTimeFrom}&challengePhaseEndTimeTo={challengePhaseEndTimeTo}&systemTestPhaseStartTimeFrom={systemTestPhaseStartTimeFrom}&systemTestPhaseStartTimeTo={systemTestPhaseStartTimeTo}&systemTestPhaseEndTimeFrom={systemTestPhaseEndTimeFrom}&systemTestPhaseEndTimeTo={systemTestPhaseEndTimeTo}&roomAssignmentPhaseStartTimeFrom={roomAssignmentPhaseStartTimeFrom}&roomAssignmentPhaseStartTimeTo={roomAssignmentPhaseStartTimeTo}&roomAssignmentPhaseEndTimeFrom={roomAssignmentPhaseEndTimeFrom}&roomAssignmentPhaseEndTimeTo={roomAssignmentPhaseEndTimeTo}&moderatedChatPhaseStartTimeFrom={moderatedChatPhaseStartTimeFrom}&moderatedChatPhaseStartTimeTo={moderatedChatPhaseStartTimeTo}&moderatedChatPhaseEndTimeFrom={moderatedChatPhaseEndTimeFrom}&moderatedChatPhaseEndTimeTo={moderatedChatPhaseEndTimeTo} +### Get Rounds [GET] + ++ Parameters + + pageIndex (optional, number, `1`) ... The paging number, 1-based, -1 if no paging. It can be null. + + pageSize (optional, number, `50`) ... The max number of the results, should be set if pageIndex is set. + + sortColumn (optional, string, `registrationPhaseStartTime`) ... The column name to sort, can be null. It should be one of registrationPhaseStartTime, registrationPhaseEndTime, codingPhaseStartTime, codingPhaseEndTime, intermissionPhaseStartTime, intermissionPhaseEndTime, challengePhaseStartTime, challengePhaseEndTime, systemTestPhaseStartTime, systemTestPhaseEndTime, roomAssignmentPhaseStartTime, roomAssignmentPhaseEndTime, moderatedChatPhaseStartTime, moderatedChatPhaseEndTime. + + sortOrder (optional, string, `desc`) ... The sort order, can be null. It should be one of desc or asc. + + name (optional, string, `test`) ... The name filter, can be null. It should be encoded in uri format. It's case insensitive and it could be only part of name to filter. + + type (optional, string, `Single%20Round%20Match`) ... The type filter, can be null. It should be encoded in uri format. It's case insensitive. It should be values in round_type_lu table description field. It could use ',' char to connect more than 1 value. + + status (optional, string, `active`) ... The status filter, can be null. It's case insensitive. It should be one of active / past / draft. It could use ',' char to connect more than 1 value. + + registrationPhaseStartTimeFrom (optional, string, `2014-01-01%2000:00:00`) The registrationPhaseStartTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + registrationPhaseStartTimeTo (optional, string, `2014-01-01%2000:00:00`) The registrationPhaseStartTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + registrationPhaseEndTimeFrom (optional, string, `2014-01-01%2000:00:00`) The registrationPhaseEndTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + registrationPhaseEndTimeTo (optional, string, `2014-01-01%2000:00:00`) The registrationPhaseEndTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + codingPhaseStartTimeFrom (optional, string, `2014-01-01%2000:00:00`) The codingPhaseStartTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + codingPhaseStartTimeTo (optional, string, `2014-01-01%2000:00:00`) The codingPhaseStartTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + codingPhaseEndTimeFrom (optional, string, `2014-01-01%2000:00:00`) The codingPhaseEndTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + codingPhaseEndTimeTo (optional, string, `2014-01-01%2000:00:00`) The codingPhaseEndTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + intermissionPhaseStartTimeFrom (optional, string, `2014-01-01%2000:00:00`) The intermissionPhaseStartTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + intermissionPhaseStartTimeTo (optional, string, `2014-01-01%2000:00:00`) The intermissionPhaseStartTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + intermissionPhaseEndTimeFrom (optional, string, `2014-01-01%2000:00:00`) The intermissionPhaseEndTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + intermissionPhaseEndTimeTo (optional, string, `2014-01-01%2000:00:00`) The intermissionPhaseEndTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + challengePhaseStartTimeFrom (optional, string, `2014-01-01%2000:00:00`) The challengePhaseStartTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + challengePhaseStartTimeTo (optional, string, `2014-01-01%2000:00:00`) The challengePhaseStartTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + challengePhaseEndTimeFrom (optional, string, `2014-01-01%2000:00:00`) The challengePhaseEndTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + challengePhaseEndTimeTo (optional, string, `2014-01-01%2000:00:00`) The challengePhaseEndTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + systemTestPhaseStartTimeFrom (optional, string, `2014-01-01%2000:00:00`) The systemTestPhaseStartTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + systemTestPhaseStartTimeTo (optional, string, `2014-01-01%2000:00:00`) The systemTestPhaseStartTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + systemTestPhaseEndTimeFrom (optional, string, `2014-01-01%2000:00:00`) The systemTestPhaseEndTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + systemTestPhaseEndTimeTo (optional, string, `2014-01-01%2000:00:00`) The systemTestPhaseEndTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + roomAssignmentPhaseStartTimeFrom (optional, string, `2014-01-01%2000:00:00`) The roomAssignmentPhaseStartTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + roomAssignmentPhaseStartTimeTo (optional, string, `2014-01-01%2000:00:00`) The roomAssignmentPhaseStartTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + roomAssignmentPhaseEndTimeFrom (optional, string, `2014-01-01%2000:00:00`) The roomAssignmentPhaseEndTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + roomAssignmentPhaseEndTimeTo (optional, string, `2014-01-01%2000:00:00`) The roomAssignmentPhaseEndTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + moderatedChatPhaseStartTimeFrom (optional, string, `2014-01-01%2000:00:00`) The moderatedChatPhaseStartTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + moderatedChatPhaseStartTimeTo (optional, string, `2014-01-01%2000:00:00`) The moderatedChatPhaseStartTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + moderatedChatPhaseEndTimeFrom (optional, string, `2014-01-01%2000:00:00`) The moderatedChatPhaseEndTimeFrom filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + + moderatedChatPhaseEndTimeTo (optional, string, `2014-01-01%2000:00:00`) The moderatedChatPhaseEndTimeTo filter, can be null. It should be encoded in uri format. The format should be 'YYYY-MM-DD HH:mm:ss'. The from date should not be later than to date in same field. + ++ Request + + Headers + Authorization : Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZHwxMzI0NTYiLCJleHAiOjEzOTI4MTc4ODQsImF1ZCI6InRvcGNvZGVyIiwiaWF0IjoxMzkyNzU3ODg0fQ.7X2IKkiyyI1ExSM5GNpdhJ8fGGK5-oAjzccX6YL_BKY + + ++ Response 200 (application/json) + + { + "total": 1, + "pageIndex": 1, + "pageSize": 2, + "data": [ + { + "ID": 12001, + "Name": "test round 12001", + "Short Name": "short name 12001", + "Type": "Single Round Match", + "Status": "Active", + "Registration Limit": 1000, + "Invitational Type": "Not", + "Region": "Alpha", + "Round Schedule": [ + { + "Phase Name": "Registration Phase", + "Start Time": "2013-11-02T05:50:51.000+05:00", + "End Time": "2013-12-02T05:50:51.000+05:00", + "Status": "Past" + }, + { + "Phase Name": "Coding Phase", + "Start Time": "2013-12-02T05:50:52.000+05:00", + "End Time": "2013-12-05T05:50:51.000+05:00", + "Status": "Past" + }, + { + "Phase Name": "Intermission Phase", + "Start Time": "2013-12-06T05:50:51.000+05:00", + "End Time": "2013-12-07T05:50:51.000+05:00", + "Status": "Past" + }, + { + "Phase Name": "Challenge Phase", + "Start Time": "2013-12-08T05:50:51.000+05:00", + "End Time": "2013-12-09T05:50:51.000+05:00", + "Status": "Past" + }, + { + "Phase Name": "System Test Phase", + "Start Time": "2013-12-10T05:50:51.000+05:00", + "End Time": "2013-12-11T05:50:51.000+05:00", + "Status": "Active" + }, + { + "Phase Name": "Moderated Chat Phase", + "Start Time": "2013-12-12T05:50:51.000+05:00", + "End Time": "2013-12-13T05:50:51.000+05:00", + "Status": "Draft" + }, + { + "Phase Name": "Room Assignment Phase", + "Start Time": "2013-12-14T05:50:51.000+05:00", + "End Time": "2013-12-15T05:50:51.000+05:00", + "Status": "Draft" + } + ] + } + ] + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "pageSize should not be null or undefined if pageIndex is provided." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "pageIndex should be less or equal to 2147483647." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "pageSize should be less or equal to 2147483647." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "pageIndex should be equal to -1 or greater than 0" + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "pageSize should be positive." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "sortOrder should be an element of asc,desc." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "sortColumn should be an element of registrationphasestarttime,registrationphaseendtime,codingphasestarttime,codingphaseendtime,intermissionphasestarttime,intermissionphaseendtime,challengephasestarttime,challengephaseendtime,systemtestphasestarttime,systemtestphaseendtime,roomassignmentphasestarttime,roomassignmentphaseendtime,moderatedchatphasestarttime,moderatedchatphaseendtime." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "status should be an element of active,past,draft." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "The dd is not a valid round_type_lu value." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "registrationPhaseStartTimeFrom is not a valid date." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "registrationPhaseStartTimeFrom should not be later than registrationPhaseStartTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "registrationPhaseEndTimeFrom should not be later than registrationPhaseEndTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "codingPhaseStartTimeFrom should not be later than codingPhaseStartTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "codingPhaseEndTimeFrom should not be later than codingPhaseEndTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "intermissionPhaseStartTimeFrom should not be later than intermissionPhaseStartTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "intermissionPhaseEndTimeFrom should not be later than intermissionPhaseEndTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "challengePhaseStartTimeFrom should not be later than challengePhaseStartTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "challengePhaseEndTimeFrom should not be later than challengePhaseEndTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "systemTestPhaseStartTimeFrom should not be later than systemTestPhaseStartTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "systemTestPhaseEndTimeFrom should not be later than systemTestPhaseEndTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "roomAssignmentPhaseStartTimeFrom should not be later than roomAssignmentPhaseStartTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "roomAssignmentPhaseEndTimeFrom should not be later than roomAssignmentPhaseEndTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "moderatedChatPhaseStartTimeFrom should not be later than moderatedChatPhaseStartTimeTo." + } + ++ Response 400 (application/json) + + { + "name":"Bad Request", + "value":"400", + "description":"This message will explain why the request is invalid or cannot be served.", + "details": "moderatedChatPhaseEndTimeFrom should not be later than moderatedChatPhaseEndTimeTo." + } ++ Response 401 (application/json) + + { + "name":"Unauthorized", + "value":"401", + "description":"Authorized information needed." + } + ++ Response 403 (application/json) + + { + "name":"Forbidden", + "value":"403", + "description":"Admin access only." + } + ++ Response 500 (application/json) + + { + "name":"Internal Server Error", + "value":"500", + "description":"Unknown server error. Please contact support." + } + ++ Response 503 (application/json) + + { + "name":"Service Unavailable", + "value":"503", + "description":"Servers are up but overloaded. Try again later." + } \ No newline at end of file diff --git a/queries/get_data_round_type_lu b/queries/get_data_round_type_lu new file mode 100644 index 000000000..b140f5b2d --- /dev/null +++ b/queries/get_data_round_type_lu @@ -0,0 +1,4 @@ +SELECT DISTINCT round_type_desc AS name +, round_type_id AS id +FROM round_type_lu +ORDER BY name ASC; diff --git a/queries/get_data_round_type_lu.json b/queries/get_data_round_type_lu.json new file mode 100644 index 000000000..56ceb17ec --- /dev/null +++ b/queries/get_data_round_type_lu.json @@ -0,0 +1,5 @@ +{ + "name" : "get_data_round_type_lu", + "db" : "informixoltp", + "sqlfile" : "get_data_round_type_lu" +} \ No newline at end of file diff --git a/queries/get_round_terms_by_ids b/queries/get_round_terms_by_ids new file mode 100644 index 000000000..fddffca14 --- /dev/null +++ b/queries/get_round_terms_by_ids @@ -0,0 +1 @@ +select round_id, terms_content from round_terms where round_id in (@roundIdList@) \ No newline at end of file diff --git a/queries/get_round_terms_by_ids.json b/queries/get_round_terms_by_ids.json new file mode 100644 index 000000000..fab0d21a9 --- /dev/null +++ b/queries/get_round_terms_by_ids.json @@ -0,0 +1,5 @@ +{ + "name" : "get_round_terms_by_ids", + "db" : "informixoltp", + "sqlfile" : "get_round_terms_by_ids" +} diff --git a/queries/get_rounds b/queries/get_rounds new file mode 100644 index 000000000..ba38989a8 --- /dev/null +++ b/queries/get_rounds @@ -0,0 +1,124 @@ +SELECT + SKIP @firstRowIndex@ + FIRST @pageSize@ + r.round_id as id, + r.name as name, + r.short_name as short_name, + rt.round_type_desc, + CASE WHEN (UPPER(r.status) = 'A') THEN + 'Active' + WHEN (UPPER(r.status) = 'P') THEN + 'Past' + WHEN (UPPER(r.status) = 'F') THEN + 'Draft' + ELSE NULL + END AS round_status, + r.registration_limit, + CASE WHEN (r.invitational = 0) THEN + 'Not' + WHEN (r.invitational = 1) THEN + 'Normal' + WHEN (r.invitational = 2) THEN + 'Negate' + ELSE NULL + END AS invitational, + reg.region_name, + rs1.start_time as start_time_1, + rs1.end_time as end_time_1, + CASE WHEN (UPPER(rs1.status) = 'A') THEN + 'Active' + WHEN (UPPER(rs1.status) = 'P') THEN + 'Past' + WHEN (UPPER(rs1.status) = 'F') THEN + 'Draft' + ELSE NULL + END as status_1, + ((select segment_desc from segment where segment_id = 1) || ' Phase') as name_1, + rs2.start_time as start_time_2, + rs2.end_time as end_time_2, + CASE WHEN (UPPER(rs2.status) = 'A') THEN + 'Active' + WHEN (UPPER(rs2.status) = 'P') THEN + 'Past' + WHEN (UPPER(rs2.status) = 'F') THEN + 'Draft' + ELSE NULL + END as status_2, + (select segment_desc from segment where segment_id = 2) as name_2, + rs3.start_time as start_time_3, + rs3.end_time as end_time_3, + CASE WHEN (UPPER(rs3.status) = 'A') THEN + 'Active' + WHEN (UPPER(rs3.status) = 'P') THEN + 'Past' + WHEN (UPPER(rs3.status) = 'F') THEN + 'Draft' + ELSE NULL + END as status_3, + (select segment_desc from segment where segment_id = 3) as name_3, + rs4.start_time as start_time_4, + rs4.end_time as end_time_4, + CASE WHEN (UPPER(rs4.status) = 'A') THEN + 'Active' + WHEN (UPPER(rs4.status) = 'P') THEN + 'Past' + WHEN (UPPER(rs4.status) = 'F') THEN + 'Draft' + ELSE NULL + END as status_4, + (select segment_desc from segment where segment_id = 4) as name_4, + rs5.start_time as start_time_5, + rs5.end_time as end_time_5, + CASE WHEN (UPPER(rs5.status) = 'A') THEN + 'Active' + WHEN (UPPER(rs5.status) = 'P') THEN + 'Past' + WHEN (UPPER(rs5.status) = 'F') THEN + 'Draft' + ELSE NULL + END as status_5, + (select segment_desc from segment where segment_id = 5) as name_5, + rs6.start_time as start_time_6, + rs6.end_time as end_time_6, + CASE WHEN (UPPER(rs6.status) = 'A') THEN + 'Active' + WHEN (UPPER(rs6.status) = 'P') THEN + 'Past' + WHEN (UPPER(rs6.status) = 'F') THEN + 'Draft' + ELSE NULL + END as status_6, + (select segment_desc from segment where segment_id = 6) as name_6, + rs7.start_time as start_time_7, + rs7.end_time as end_time_7, + CASE WHEN (UPPER(rs7.status) = 'A') THEN + 'Active' + WHEN (UPPER(rs7.status) = 'P') THEN + 'Past' + WHEN (UPPER(rs7.status) = 'F') THEN + 'Draft' + ELSE NULL + END as status_7, + (select segment_desc from segment where segment_id = 7) as name_7 + FROM (round r + LEFT OUTER JOIN round_type_lu rt + ON r.round_type_id=rt.round_type_id + LEFT OUTER JOIN region reg + ON r.region_id=reg.region_id + LEFT OUTER JOIN round_segment rs1 + ON r.round_id=rs1.round_id and rs1.segment_id = 1 + LEFT OUTER JOIN round_segment rs2 + ON r.round_id=rs2.round_id and rs2.segment_id = 2 + LEFT OUTER JOIN round_segment rs3 + ON r.round_id=rs3.round_id and rs3.segment_id = 3 + LEFT OUTER JOIN round_segment rs4 + ON r.round_id=rs4.round_id and rs4.segment_id = 4 + LEFT OUTER JOIN round_segment rs5 + ON r.round_id=rs5.round_id and rs5.segment_id = 5 + LEFT OUTER JOIN round_segment rs6 + ON r.round_id=rs6.round_id and rs6.segment_id = 6 + LEFT OUTER JOIN round_segment rs7 + ON r.round_id=rs7.round_id and rs7.segment_id = 7 + ) +WHERE @filterCondition@ +ORDER BY @sortColumn@ @sortOrder@ \ No newline at end of file diff --git a/queries/get_rounds.json b/queries/get_rounds.json new file mode 100644 index 000000000..bbd498836 --- /dev/null +++ b/queries/get_rounds.json @@ -0,0 +1,5 @@ +{ + "name" : "get_rounds", + "db" : "informixoltp", + "sqlfile" : "get_rounds" +} diff --git a/queries/get_rounds_count b/queries/get_rounds_count new file mode 100644 index 000000000..df929e743 --- /dev/null +++ b/queries/get_rounds_count @@ -0,0 +1,23 @@ +SELECT +count(*) as total_count + FROM (round r + LEFT OUTER JOIN round_type_lu rt + ON r.round_type_id=rt.round_type_id + LEFT OUTER JOIN region reg + ON r.region_id=reg.region_id + LEFT OUTER JOIN round_segment rs1 + ON r.round_id=rs1.round_id and rs1.segment_id = 1 + LEFT OUTER JOIN round_segment rs2 + ON r.round_id=rs2.round_id and rs2.segment_id = 2 + LEFT OUTER JOIN round_segment rs3 + ON r.round_id=rs3.round_id and rs3.segment_id = 3 + LEFT OUTER JOIN round_segment rs4 + ON r.round_id=rs4.round_id and rs4.segment_id = 4 + LEFT OUTER JOIN round_segment rs5 + ON r.round_id=rs5.round_id and rs5.segment_id = 5 + LEFT OUTER JOIN round_segment rs6 + ON r.round_id=rs6.round_id and rs6.segment_id = 6 + LEFT OUTER JOIN round_segment rs7 + ON r.round_id=rs7.round_id and rs7.segment_id = 7 + ) +WHERE @filterCondition@ \ No newline at end of file diff --git a/queries/get_rounds_count.json b/queries/get_rounds_count.json new file mode 100644 index 000000000..8f73855fb --- /dev/null +++ b/queries/get_rounds_count.json @@ -0,0 +1,5 @@ +{ + "name" : "get_rounds_count", + "db" : "informixoltp", + "sqlfile" : "get_rounds_count" +} diff --git a/routes.js b/routes.js index 42cccdb85..70a4bb186 100755 --- a/routes.js +++ b/routes.js @@ -1,7 +1,7 @@ /* * Copyright (C) 2013 - 2014 TopCoder Inc., All Rights Reserved. * - * @version 1.67 + * @version 1.68 * @author vangavroche, Sky_, muzehyun, kurtrips, Ghost_141, ecnu_haozi, hesibo, LazyChild, isv, flytoj2ee, * @author panoptimum, bugbuka, Easyhard, TCASSEMBLER * @@ -154,6 +154,8 @@ * - Added get user design challenges api. * Changed in 1.67: * - Added get user develop challenges api. + * Changed in 1.68: + * - Added get rounds api. */ /*jslint node:true, nomen: true */ "use strict"; @@ -259,7 +261,7 @@ exports.routes = { { path: "/:apiVersion/develop/reviewOpportunities/:challengeId", action: "getSoftwareReviewOpportunity" }, { path: "/:apiVersion/develop/reviewOpportunities", action: "searchReviewOpportunities" }, { path: "/:apiVersion/develop/download/:submissionId", action: "downloadDevSubmission" }, - + { path: "/:apiVersion/design/challengetypes", action: "studioTypes" }, { path: "/:apiVersion/design/challenges/result/:challengeId", action: "getStudioChallengeResults" }, { path: "/:apiVersion/design/reviewOpportunities/:id", action: "getStudioReviewOpportunity" }, @@ -270,7 +272,7 @@ exports.routes = { { path: "/:apiVersion/user/:handle/challenges/design", action: "getUserDesignChallenges" }, { path: "/:apiVersion/user/:handle/challenges/develop", action: "getUserDevelopChallenges" }, - + { path: "/:apiVersion/user/challenges", action: "getMyChallenges" }, { path: "/:apiVersion/user/activation-email", action: "userActivationEmail" }, @@ -356,6 +358,7 @@ exports.routes = { { path: "/:apiVersion/data/srm/rounds/:roundId/terms", action: "getRoundTerms" }, { path: "/:apiVersion/data/srm/rounds/:contestId", action: "listSRMContestRounds" }, { path: "/:apiVersion/auth0/callback", action: "auth0Callback" }, + { path: "/:apiVersion/data/rounds", action: "getRounds" }, //Stubs APIs { path: "/:apiVersion/data/reviewOpportunities/:id", action: "getAlgorithmsReviewOpportunity" }, diff --git a/test/sqls/rounds/informixoltp__clean b/test/sqls/rounds/informixoltp__clean new file mode 100644 index 000000000..94211cd34 --- /dev/null +++ b/test/sqls/rounds/informixoltp__clean @@ -0,0 +1,4 @@ +DELETE FROM round_terms WHERE round_id >= 12001 and round_id < 13000; +DELETE FROM round_segment WHERE round_id >= 12001 and round_id < 13000; +DELETE FROM round WHERE round_id >= 12001 and round_id < 13000; +DELETE FROM contest WHERE contest_id = 12001; diff --git a/test/sqls/rounds/informixoltp__insert_test_data b/test/sqls/rounds/informixoltp__insert_test_data new file mode 100644 index 000000000..cbed51742 --- /dev/null +++ b/test/sqls/rounds/informixoltp__insert_test_data @@ -0,0 +1,62 @@ +INSERT INTO contest(contest_id, name) VALUES(12001, 'test contest 12001'); + +INSERT INTO round(round_id, contest_id, name, status, registration_limit, invitational, round_type_id, short_name, region_id) VALUES(12001, 12001, 'test round 12001', 'A', 1000, 0, 1, 'short name 12001', 1); + +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12001, 1, '2013-11-02 01:50:51', '2013-12-02 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12001, 2, '2013-12-02 01:50:52', '2013-12-05 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12001, 3, '2013-12-06 01:50:51', '2013-12-07 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12001, 4, '2013-12-08 01:50:51', '2013-12-09 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12001, 5, '2013-12-10 01:50:51', '2013-12-11 01:50:51', 'A'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12001, 6, '2013-12-12 01:50:51', '2013-12-13 01:50:51', 'F'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12001, 7, '2013-12-14 01:50:51', '2013-12-15 01:50:51', 'F'); + + +INSERT INTO round(round_id, contest_id, name, status, registration_limit, invitational, round_type_id, short_name, region_id) VALUES(12002, 12001, 'test round 12002', 'A', 1000, 0, 2, 'short name 12002', 1); + +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12002, 1, '2014-11-02 01:50:51', '2014-12-02 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12002, 2, '2014-12-02 01:50:52', '2014-12-05 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12002, 3, '2014-12-06 01:50:51', '2014-12-07 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12002, 4, '2014-12-08 01:50:51', '2014-12-09 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12002, 5, '2014-12-10 01:50:51', '2014-12-11 01:50:51', 'A'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12002, 6, '2014-12-12 01:50:51', '2014-12-13 01:50:51', 'F'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12002, 7, '2014-12-14 01:50:51', '2014-12-15 01:50:51', 'F'); + + +INSERT INTO round(round_id, contest_id, name, status, registration_limit, invitational, round_type_id, short_name, region_id) VALUES(12003, 12001, 'test round 12003', 'A', 1000, 0, 3, 'short name 12003', 1); + +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12003, 1, '2013-08-02 01:50:51', '2013-09-02 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12003, 2, '2013-09-02 01:50:52', '2013-09-05 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12003, 3, '2013-09-06 01:50:51', '2013-09-07 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12003, 4, '2013-09-08 01:50:51', '2013-09-09 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12003, 5, '2013-09-10 01:50:51', '2013-09-11 01:50:51', 'A'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12003, 6, '2013-09-12 01:50:51', '2013-09-13 01:50:51', 'F'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12003, 7, '2013-09-14 01:50:51', '2013-09-15 01:50:51', 'F'); + + +INSERT INTO round(round_id, contest_id, name, status, registration_limit, invitational, round_type_id, short_name, region_id) VALUES(12004, 12001, 'test round 12004', 'A', 1000, 0, 6, 'short name 12004', 1); + +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12004, 1, '2013-01-02 01:50:51', '2013-02-02 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12004, 2, '2013-02-02 01:50:52', '2013-02-05 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12004, 3, '2013-02-06 01:50:51', '2013-02-07 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12004, 4, '2013-02-08 01:50:51', '2013-02-09 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12004, 5, '2013-02-10 01:50:51', '2013-02-11 01:50:51', 'A'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12004, 6, '2013-02-12 01:50:51', '2013-02-13 01:50:51', 'F'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12004, 7, '2013-02-14 01:50:51', '2013-02-15 01:50:51', 'F'); + + +INSERT INTO round(round_id, contest_id, name, status, registration_limit, invitational, round_type_id, short_name, region_id) VALUES(12005, 12001, 'test round 12005', 'A', 1000, 0, 13, 'short name 12005', 1); + +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12005, 1, '2011-11-02 01:50:51', '2011-12-02 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12005, 2, '2011-12-02 01:50:52', '2011-12-05 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12005, 5, '2011-12-10 01:50:51', '2011-12-11 01:50:51', 'A'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12005, 7, '2011-12-14 01:50:51', '2011-12-15 01:50:51', 'F'); + + +INSERT INTO round(round_id, contest_id, name, status, registration_limit, invitational, round_type_id, short_name, region_id) VALUES(12006, 12001, 'test round 12006', 'A', 1000, 0, 19, 'short name 12006', 1); + +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12006, 1, '2015-11-02 01:50:51', '2015-12-02 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12006, 2, '2015-12-02 01:50:52', '2015-12-05 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12006, 3, '2015-12-06 01:50:51', '2015-12-07 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12006, 4, '2015-12-08 01:50:51', '2015-12-09 01:50:51', 'P'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12006, 5, '2015-12-10 01:50:51', '2015-12-11 01:50:51', 'A'); +INSERT INTO round_segment(round_id, segment_id, start_time, end_time, status) VALUES(12006, 7, '2015-12-14 01:50:51', '2015-12-15 01:50:51', 'F'); \ No newline at end of file diff --git a/test/test.rounds.js b/test/test.rounds.js new file mode 100644 index 000000000..8dbbd5e55 --- /dev/null +++ b/test/test.rounds.js @@ -0,0 +1,359 @@ +/* + * Copyright (C) 2014 TopCoder Inc., All Rights Reserved. + * + * @version 1.0 + * @author TCSASSEMBLER + * + * The test cases for rounds.js. + */ +"use strict"; +/*global describe, it, before, beforeEach, after, afterEach */ +/*jslint node: true, stupid: true, unparam: true, plusplus: true */ + +/** + * Module dependencies. + */ +var request = require('supertest'), + chai = require('chai'), + jwt = require('jsonwebtoken'); + +var assert = chai.assert; +var testHelper = require('./helpers/testHelper'); +var async = require("async"); + +var API_ENDPOINT = process.env.API_ENDPOINT || 'http://localhost:8080', + SQL_DIR = __dirname + "/sqls/rounds/", + CLIENT_ID = require('../config/tc-config').tcConfig.oauthClientId, + CLIENT_SECRET = require('../config/tc-config').tcConfig.oauthClientSecret, + USER = { + heffan : "ad|132456", + "super" : "ad|132457", + user : "ad|132458" + }; + +/** + * Generate an auth header + * @param {String} user the user to generate the header for + * @return {String} the generated string + */ +function generateAuthHeader(user) { + return "Bearer " + jwt.sign({sub: USER[user]}, CLIENT_SECRET, {expiresInMinutes: 1000, audience: CLIENT_ID}); +} +/** + * Create request and return it + * @param {String} queryString - the query string + * @param {String} user - the user handle + * @return {Object} request instance + */ +function createRequest(queryString, user) { + var req = request(API_ENDPOINT) + .get(queryString) + .set("Accept", "application/json") + .expect("Content-Type", /json/); + if (user) { + req.set('Authorization', generateAuthHeader(user)); + } + + return req; +} + +/** + * Assert error request. + * + * @param {String} queryString - the query string + * @param {String} user - the user handle + * @param {Number} statusCode - the expected status code + * @param {String} errorDetail - the error detail. + * @param {Function} done the callback function + */ +function assertError(queryString, user, statusCode, errorDetail, done) { + createRequest(queryString, user).expect(statusCode).end(function (err, res) { + if (err) { + done(err); + return; + } + if (statusCode === 200) { + assert.equal(res.body.error, errorDetail, "Invalid error detail"); + } else { + assert.equal(res.body.error.details, errorDetail, "Invalid error detail"); + } + done(); + }); +} + +/** + * Validate the result. + * @param {String} queryString - the query string + * @param {String} user - the user handle + * @param {String} expectFile - the file name + * @param {Function} done the callback function + */ +function validateResult(queryString, user, expectFile, done) { + createRequest(queryString, user).expect(200).end(function (err, res) { + if (err) { + done(err); + return; + } + var tmp = [], i, expected; + + for (i = 0; i < res.body.data.length; i++) { + // only check the test data + if (res.body.data[i].id > 13000 || res.body.data[i].id < 12000) { + res.body.total = res.body.total - 1; + } else { + tmp.push(res.body.data[i]); + } + } + res.body.data = tmp; + expected = require(expectFile); + delete res.body.serverInformation; + delete res.body.requesterInformation; + assert.deepEqual(res.body, expected, "Invalid response"); + done(); + }); +} + +// Test the get rounds api. +describe('Get rounds api', function () { + this.timeout(120000); // Wait 2 minutes, remote db might be slow. + + /** + * Clear database + * @param {Function} done the callback + */ + function clearDb(done) { + testHelper.runSqlFile(SQL_DIR + "informixoltp__clean", "informixoltp", done); + } + + /** + * This function is run before all tests. + * + * @param {Function} done the callback + */ + before(function (done) { + async.waterfall([ + clearDb, + function (cb) { + testHelper.runSqlFile(SQL_DIR + "informixoltp__insert_test_data", "informixoltp", cb); + }, function (cb) { + testHelper.updateTextColumn("INSERT INTO round_terms(round_id, terms_content) VALUES (?, ?)", "informixoltp", + [{type: 'int', value : 12001}, {type: 'text', value : 'term1'}], cb); + }, function (res, cb) { + testHelper.updateTextColumn("INSERT INTO round_terms(round_id, terms_content) VALUES (?, ?)", "informixoltp", + [{type: 'int', value : 12001}, {type: 'text', value : 'term2'}], cb); + } + ], done); + }); + + /** + * This function is run after all tests. + * Clean up all data. + * @param {Function} done the callback + */ + after(function (done) { + clearDb(done); + }); + + // Invalid test + describe('Get rounds api invalid test', function () { + + it("No anonymous access.", function (done) { + assertError("/v2/data/rounds", null, 401, "Authorized information needed.", done); + }); + + it("Admin access only.", function (done) { + assertError("/v2/data/rounds", 'user', 403, "Admin access only.", done); + }); + + // only pageIndex + it("pageSize should not be null or undefined if pageIndex is provided.", function (done) { + assertError("/v2/data/rounds?pageIndex=1", 'heffan', 400, "pageSize should not be null or undefined if pageIndex is provided.", done); + }); + + // pageIndex max number + it("pageIndex should be less or equal to 2147483647.", function (done) { + assertError("/v2/data/rounds?pageIndex=1234567890123456&pageSize=10", 'heffan', 400, + "pageIndex should be less or equal to 2147483647.", done); + }); + + // pageSize max number + it("pageSize should be less or equal to 2147483647.", function (done) { + assertError("/v2/data/rounds?pageSize=1234567890123456&pageIndex=1", 'heffan', 400, + "pageSize should be less or equal to 2147483647.", done); + }); + + // pageIndex < 0 + it("pageIndex should be equal to -1 or greater than 0.", function (done) { + assertError("/v2/data/rounds?pageIndex=-12&pageSize=10", 'heffan', 400, + "pageIndex should be equal to -1 or greater than 0", done); + }); + + // pageSize <= 0 + it("pageSize should be positive.", function (done) { + assertError("/v2/data/rounds?pageSize=-12", 'heffan', 400, + "pageSize should be positive.", done); + }); + + // sortOrder + it("sortOrder should be an element of asc,desc.", function (done) { + assertError("/v2/data/rounds?sortOrder=dd", 'heffan', 400, + "sortOrder should be an element of asc,desc.", done); + }); + + // sortColumn + it("sortColumn should be an element of registrationphasestarttime,registrationphaseendtime," + + "codingphasestarttime,codingphaseendtime,intermissionphasestarttime,intermissionphaseendtime," + + "challengephasestarttime,challengephaseendtime,systemtestphasestarttime,systemtestphaseendtime," + + "roomassignmentphasestarttime,roomassignmentphaseendtime,moderatedchatphasestarttime,moderatedchatphaseendtime.", function (done) { + assertError("/v2/data/rounds?sortColumn=dd", 'heffan', 400, + "sortColumn should be an element of registrationphasestarttime,registrationphaseendtime," + + "codingphasestarttime,codingphaseendtime,intermissionphasestarttime,intermissionphaseendtime," + + "challengephasestarttime,challengephaseendtime,systemtestphasestarttime,systemtestphaseendtime," + + "roomassignmentphasestarttime,roomassignmentphaseendtime,moderatedchatphasestarttime,moderatedchatphaseendtime.", done); + }); + + // invalid status + it("status should be an element of active,past,draft.", function (done) { + assertError("/v2/data/rounds?status=dd", 'heffan', 400, + "status should be an element of active,past,draft.", done); + }); + + // invalid type + it("The dd is not a valid round_type_lu value.", function (done) { + assertError("/v2/data/rounds?type=dd", 'heffan', 400, + "The dd is not a valid round_type_lu value.", done); + }); + + // invalid time + it("registrationPhaseStartTimeFrom is not a valid date.", function (done) { + assertError("/v2/data/rounds?registrationPhaseStartTimeFrom=dd", 'heffan', 400, + "registrationPhaseStartTimeFrom is not a valid date.", done); + }); + + it("registrationPhaseStartTimeFrom should not be later than registrationPhaseStartTimeTo.", function (done) { + assertError("/v2/data/rounds?registrationPhaseStartTimeFrom=2011-01-01%2000:00:00®istrationPhaseStartTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "registrationPhaseStartTimeFrom should not be later than registrationPhaseStartTimeTo.", done); + }); + + it("registrationPhaseEndTimeFrom should not be later than registrationPhaseEndTimeTo.", function (done) { + assertError("/v2/data/rounds?registrationPhaseEndTimeFrom=2011-01-01%2000:00:00®istrationPhaseEndTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "registrationPhaseEndTimeFrom should not be later than registrationPhaseEndTimeTo.", done); + }); + + it("codingPhaseStartTimeFrom should not be later than codingPhaseStartTimeTo.", function (done) { + assertError("/v2/data/rounds?codingPhaseStartTimeFrom=2011-01-01%2000:00:00&codingPhaseStartTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "codingPhaseStartTimeFrom should not be later than codingPhaseStartTimeTo.", done); + }); + + it("codingPhaseEndTimeFrom should not be later than codingPhaseEndTimeTo.", function (done) { + assertError("/v2/data/rounds?codingPhaseEndTimeFrom=2011-01-01%2000:00:00&codingPhaseEndTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "codingPhaseEndTimeFrom should not be later than codingPhaseEndTimeTo.", done); + }); + + it("intermissionPhaseStartTimeFrom should not be later than intermissionPhaseStartTimeTo.", function (done) { + assertError("/v2/data/rounds?intermissionPhaseStartTimeFrom=2011-01-01%2000:00:00&intermissionPhaseStartTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "intermissionPhaseStartTimeFrom should not be later than intermissionPhaseStartTimeTo.", done); + }); + + it("intermissionPhaseEndTimeFrom should not be later than intermissionPhaseEndTimeTo.", function (done) { + assertError("/v2/data/rounds?intermissionPhaseEndTimeFrom=2011-01-01%2000:00:00&intermissionPhaseEndTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "intermissionPhaseEndTimeFrom should not be later than intermissionPhaseEndTimeTo.", done); + }); + + it("challengePhaseStartTimeFrom should not be later than challengePhaseStartTimeTo.", function (done) { + assertError("/v2/data/rounds?challengePhaseStartTimeFrom=2011-01-01%2000:00:00&challengePhaseStartTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "challengePhaseStartTimeFrom should not be later than challengePhaseStartTimeTo.", done); + }); + + it("challengePhaseEndTimeFrom should not be later than challengePhaseEndTimeTo.", function (done) { + assertError("/v2/data/rounds?challengePhaseEndTimeFrom=2011-01-01%2000:00:00&challengePhaseEndTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "challengePhaseEndTimeFrom should not be later than challengePhaseEndTimeTo.", done); + }); + + it("systemTestPhaseStartTimeFrom should not be later than systemTestPhaseStartTimeTo.", function (done) { + assertError("/v2/data/rounds?systemTestPhaseStartTimeFrom=2011-01-01%2000:00:00&systemTestPhaseStartTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "systemTestPhaseStartTimeFrom should not be later than systemTestPhaseStartTimeTo.", done); + }); + + it("systemTestPhaseEndTimeFrom should not be later than systemTestPhaseEndTimeTo.", function (done) { + assertError("/v2/data/rounds?systemTestPhaseEndTimeFrom=2011-01-01%2000:00:00&systemTestPhaseEndTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "systemTestPhaseEndTimeFrom should not be later than systemTestPhaseEndTimeTo.", done); + }); + + it("roomAssignmentPhaseStartTimeFrom should not be later than roomAssignmentPhaseStartTimeTo.", function (done) { + assertError("/v2/data/rounds?roomAssignmentPhaseStartTimeFrom=2011-01-01%2000:00:00&roomAssignmentPhaseStartTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "roomAssignmentPhaseStartTimeFrom should not be later than roomAssignmentPhaseStartTimeTo.", done); + }); + + it("roomAssignmentPhaseEndTimeFrom should not be later than roomAssignmentPhaseEndTimeTo.", function (done) { + assertError("/v2/data/rounds?roomAssignmentPhaseEndTimeFrom=2011-01-01%2000:00:00&roomAssignmentPhaseEndTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "roomAssignmentPhaseEndTimeFrom should not be later than roomAssignmentPhaseEndTimeTo.", done); + }); + + it("moderatedChatPhaseStartTimeFrom should not be later than moderatedChatPhaseStartTimeTo.", function (done) { + assertError("/v2/data/rounds?moderatedChatPhaseStartTimeFrom=2011-01-01%2000:00:00&moderatedChatPhaseStartTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "moderatedChatPhaseStartTimeFrom should not be later than moderatedChatPhaseStartTimeTo.", done); + }); + + it("moderatedChatPhaseEndTimeFrom should not be later than moderatedChatPhaseEndTimeTo.", function (done) { + assertError("/v2/data/rounds?moderatedChatPhaseEndTimeFrom=2011-01-01%2000:00:00&moderatedChatPhaseEndTimeTo=2010-01-01%2000:00:00", 'heffan', 400, + "moderatedChatPhaseEndTimeFrom should not be later than moderatedChatPhaseEndTimeTo.", done); + }); + + }); + + + // valid test + describe('Valid test', function () { + + // default parameter + it("test with default parameters", function (done) { + validateResult("/v2/data/rounds", 'heffan', + "./test_files/rounds/expected_default_parameters.json", done); + }); + + // sort + it("test with sort parameters", function (done) { + validateResult("/v2/data/rounds?sortColumn=codingPhaseStartTime&sortOrder=desc", 'heffan', + "./test_files/rounds/expected_sort_parameters.json", done); + }); + + // pagination + it("test with pagination parameters", function (done) { + validateResult("/v2/data/rounds?pageSize=2&pageIndex=2", 'heffan', + "./test_files/rounds/expected_pagination_parameters.json", done); + }); + + // time filter + it("test with time filter parameters", function (done) { + validateResult("/v2/data/rounds?registrationPhaseStartTimeFrom=2011-11-01%2000:00:00®istrationPhaseStartTimeTo=2012-01-01%2000:00:00", 'heffan', + "./test_files/rounds/expected_time_parameters.json", done); + }); + + // name filter + it("test with name filter parameters", function (done) { + validateResult("/v2/data/rounds?name=test%20round", 'heffan', + "./test_files/rounds/expected_name_parameters.json", done); + }); + + // status filter + it("test with status filter parameters", function (done) { + validateResult("/v2/data/rounds?status=active,draft", 'heffan', + "./test_files/rounds/expected_status_parameters.json", done); + }); + + // type filter + it("test with type filter parameters", function (done) { + validateResult("/v2/data/rounds?type=Single%20Round%20Match", 'heffan', + "./test_files/rounds/expected_type_parameters.json", done); + }); + + // full parameters + it("test with full parameters", function (done) { + validateResult("/v2/data/rounds?sortColumn=codingPhaseStartTime&sortOrder=desc&pageSize=2&pageIndex=1" + + "&name=test%20round&status=active,draft&type=Single%20Round%20Match®istrationPhaseStartTimeFrom=2013-11-01%2000:00:00" + + "®istrationPhaseStartTimeTo=2014-01-01%2000:00:00", 'heffan', + "./test_files/rounds/expected_full_parameters.json", done); + }); + }); +}); \ No newline at end of file diff --git a/test/test_files/rounds/expected_default_parameters.json b/test/test_files/rounds/expected_default_parameters.json new file mode 100644 index 000000000..3acfd05db --- /dev/null +++ b/test/test_files/rounds/expected_default_parameters.json @@ -0,0 +1,308 @@ +{ + "total": 6, + "pageIndex": 1, + "pageSize": 50, + "data": [ + { + "id": 12005, + "name": "test round 12005", + "shortName": "short name 12005", + "type": "Marathon Match", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2011-11-02T05:50:51.000+05:00", + "endTime": "2011-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2011-12-02T05:50:52.000+05:00", + "endTime": "2011-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2011-12-10T05:50:51.000+05:00", + "endTime": "2011-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2011-12-14T05:50:51.000+05:00", + "endTime": "2011-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12004, + "name": "test round 12004", + "shortName": "short name 12004", + "type": "Screening Tool Problem Sets", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-01-02T05:50:51.000+05:00", + "endTime": "2013-02-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-02-02T05:50:52.000+05:00", + "endTime": "2013-02-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-02-06T05:50:51.000+05:00", + "endTime": "2013-02-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-02-08T05:50:51.000+05:00", + "endTime": "2013-02-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-02-10T05:50:51.000+05:00", + "endTime": "2013-02-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-02-12T05:50:51.000+05:00", + "endTime": "2013-02-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-02-14T05:50:51.000+05:00", + "endTime": "2013-02-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12003, + "name": "test round 12003", + "shortName": "short name 12003", + "type": "Practice Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-08-02T04:50:51.000+05:00", + "endTime": "2013-09-02T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-09-02T04:50:52.000+05:00", + "endTime": "2013-09-05T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-09-06T04:50:51.000+05:00", + "endTime": "2013-09-07T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-09-08T04:50:51.000+05:00", + "endTime": "2013-09-09T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-09-10T04:50:51.000+05:00", + "endTime": "2013-09-11T04:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-09-12T04:50:51.000+05:00", + "endTime": "2013-09-13T04:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-09-14T04:50:51.000+05:00", + "endTime": "2013-09-15T04:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12001, + "name": "test round 12001", + "shortName": "short name 12001", + "type": "Single Round Match", + "status": "Active", + "roundTerms": "term1", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-11-02T05:50:51.000+05:00", + "endTime": "2013-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-12-02T05:50:52.000+05:00", + "endTime": "2013-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-12-06T05:50:51.000+05:00", + "endTime": "2013-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-12-08T05:50:51.000+05:00", + "endTime": "2013-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-12-10T05:50:51.000+05:00", + "endTime": "2013-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-12-12T05:50:51.000+05:00", + "endTime": "2013-12-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-12-14T05:50:51.000+05:00", + "endTime": "2013-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12002, + "name": "test round 12002", + "shortName": "short name 12002", + "type": "Tournament Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2014-11-02T05:50:51.000+05:00", + "endTime": "2014-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2014-12-02T05:50:52.000+05:00", + "endTime": "2014-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2014-12-06T05:50:51.000+05:00", + "endTime": "2014-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2014-12-08T05:50:51.000+05:00", + "endTime": "2014-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2014-12-10T05:50:51.000+05:00", + "endTime": "2014-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2014-12-12T05:50:51.000+05:00", + "endTime": "2014-12-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2014-12-14T05:50:51.000+05:00", + "endTime": "2014-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12006, + "name": "test round 12006", + "shortName": "short name 12006", + "type": "Marathon Match Tournament Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2015-11-02T05:50:51.000+05:00", + "endTime": "2015-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2015-12-02T05:50:52.000+05:00", + "endTime": "2015-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2015-12-06T05:50:51.000+05:00", + "endTime": "2015-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2015-12-08T05:50:51.000+05:00", + "endTime": "2015-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2015-12-10T05:50:51.000+05:00", + "endTime": "2015-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2015-12-14T05:50:51.000+05:00", + "endTime": "2015-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + } + ] +} \ No newline at end of file diff --git a/test/test_files/rounds/expected_full_parameters.json b/test/test_files/rounds/expected_full_parameters.json new file mode 100644 index 000000000..808e1c946 --- /dev/null +++ b/test/test_files/rounds/expected_full_parameters.json @@ -0,0 +1,62 @@ +{ + "total": 1, + "pageIndex": 1, + "pageSize": 2, + "data": [ + { + "id": 12001, + "name": "test round 12001", + "shortName": "short name 12001", + "type": "Single Round Match", + "status": "Active", + "roundTerms": "term1", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-11-02T05:50:51.000+05:00", + "endTime": "2013-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-12-02T05:50:52.000+05:00", + "endTime": "2013-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-12-06T05:50:51.000+05:00", + "endTime": "2013-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-12-08T05:50:51.000+05:00", + "endTime": "2013-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-12-10T05:50:51.000+05:00", + "endTime": "2013-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-12-12T05:50:51.000+05:00", + "endTime": "2013-12-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-12-14T05:50:51.000+05:00", + "endTime": "2013-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + } + ] +} \ No newline at end of file diff --git a/test/test_files/rounds/expected_name_parameters.json b/test/test_files/rounds/expected_name_parameters.json new file mode 100644 index 000000000..3acfd05db --- /dev/null +++ b/test/test_files/rounds/expected_name_parameters.json @@ -0,0 +1,308 @@ +{ + "total": 6, + "pageIndex": 1, + "pageSize": 50, + "data": [ + { + "id": 12005, + "name": "test round 12005", + "shortName": "short name 12005", + "type": "Marathon Match", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2011-11-02T05:50:51.000+05:00", + "endTime": "2011-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2011-12-02T05:50:52.000+05:00", + "endTime": "2011-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2011-12-10T05:50:51.000+05:00", + "endTime": "2011-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2011-12-14T05:50:51.000+05:00", + "endTime": "2011-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12004, + "name": "test round 12004", + "shortName": "short name 12004", + "type": "Screening Tool Problem Sets", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-01-02T05:50:51.000+05:00", + "endTime": "2013-02-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-02-02T05:50:52.000+05:00", + "endTime": "2013-02-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-02-06T05:50:51.000+05:00", + "endTime": "2013-02-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-02-08T05:50:51.000+05:00", + "endTime": "2013-02-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-02-10T05:50:51.000+05:00", + "endTime": "2013-02-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-02-12T05:50:51.000+05:00", + "endTime": "2013-02-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-02-14T05:50:51.000+05:00", + "endTime": "2013-02-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12003, + "name": "test round 12003", + "shortName": "short name 12003", + "type": "Practice Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-08-02T04:50:51.000+05:00", + "endTime": "2013-09-02T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-09-02T04:50:52.000+05:00", + "endTime": "2013-09-05T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-09-06T04:50:51.000+05:00", + "endTime": "2013-09-07T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-09-08T04:50:51.000+05:00", + "endTime": "2013-09-09T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-09-10T04:50:51.000+05:00", + "endTime": "2013-09-11T04:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-09-12T04:50:51.000+05:00", + "endTime": "2013-09-13T04:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-09-14T04:50:51.000+05:00", + "endTime": "2013-09-15T04:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12001, + "name": "test round 12001", + "shortName": "short name 12001", + "type": "Single Round Match", + "status": "Active", + "roundTerms": "term1", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-11-02T05:50:51.000+05:00", + "endTime": "2013-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-12-02T05:50:52.000+05:00", + "endTime": "2013-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-12-06T05:50:51.000+05:00", + "endTime": "2013-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-12-08T05:50:51.000+05:00", + "endTime": "2013-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-12-10T05:50:51.000+05:00", + "endTime": "2013-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-12-12T05:50:51.000+05:00", + "endTime": "2013-12-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-12-14T05:50:51.000+05:00", + "endTime": "2013-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12002, + "name": "test round 12002", + "shortName": "short name 12002", + "type": "Tournament Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2014-11-02T05:50:51.000+05:00", + "endTime": "2014-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2014-12-02T05:50:52.000+05:00", + "endTime": "2014-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2014-12-06T05:50:51.000+05:00", + "endTime": "2014-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2014-12-08T05:50:51.000+05:00", + "endTime": "2014-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2014-12-10T05:50:51.000+05:00", + "endTime": "2014-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2014-12-12T05:50:51.000+05:00", + "endTime": "2014-12-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2014-12-14T05:50:51.000+05:00", + "endTime": "2014-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12006, + "name": "test round 12006", + "shortName": "short name 12006", + "type": "Marathon Match Tournament Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2015-11-02T05:50:51.000+05:00", + "endTime": "2015-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2015-12-02T05:50:52.000+05:00", + "endTime": "2015-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2015-12-06T05:50:51.000+05:00", + "endTime": "2015-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2015-12-08T05:50:51.000+05:00", + "endTime": "2015-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2015-12-10T05:50:51.000+05:00", + "endTime": "2015-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2015-12-14T05:50:51.000+05:00", + "endTime": "2015-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + } + ] +} \ No newline at end of file diff --git a/test/test_files/rounds/expected_pagination_parameters.json b/test/test_files/rounds/expected_pagination_parameters.json new file mode 100644 index 000000000..6871a5cf1 --- /dev/null +++ b/test/test_files/rounds/expected_pagination_parameters.json @@ -0,0 +1,97 @@ +{ + "total": 13, + "pageIndex": 2, + "pageSize": 2, + "data": [ + { + "id": 12005, + "name": "test round 12005", + "shortName": "short name 12005", + "type": "Marathon Match", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2011-11-02T05:50:51.000+05:00", + "endTime": "2011-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2011-12-02T05:50:52.000+05:00", + "endTime": "2011-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2011-12-10T05:50:51.000+05:00", + "endTime": "2011-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2011-12-14T05:50:51.000+05:00", + "endTime": "2011-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12004, + "name": "test round 12004", + "shortName": "short name 12004", + "type": "Screening Tool Problem Sets", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-01-02T05:50:51.000+05:00", + "endTime": "2013-02-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-02-02T05:50:52.000+05:00", + "endTime": "2013-02-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-02-06T05:50:51.000+05:00", + "endTime": "2013-02-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-02-08T05:50:51.000+05:00", + "endTime": "2013-02-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-02-10T05:50:51.000+05:00", + "endTime": "2013-02-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-02-12T05:50:51.000+05:00", + "endTime": "2013-02-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-02-14T05:50:51.000+05:00", + "endTime": "2013-02-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + } + ] +} \ No newline at end of file diff --git a/test/test_files/rounds/expected_sort_parameters.json b/test/test_files/rounds/expected_sort_parameters.json new file mode 100644 index 000000000..e6b78db9e --- /dev/null +++ b/test/test_files/rounds/expected_sort_parameters.json @@ -0,0 +1,308 @@ +{ + "total": 6, + "pageIndex": 1, + "pageSize": 50, + "data": [ + { + "id": 12006, + "name": "test round 12006", + "shortName": "short name 12006", + "type": "Marathon Match Tournament Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2015-11-02T05:50:51.000+05:00", + "endTime": "2015-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2015-12-02T05:50:52.000+05:00", + "endTime": "2015-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2015-12-06T05:50:51.000+05:00", + "endTime": "2015-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2015-12-08T05:50:51.000+05:00", + "endTime": "2015-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2015-12-10T05:50:51.000+05:00", + "endTime": "2015-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2015-12-14T05:50:51.000+05:00", + "endTime": "2015-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12002, + "name": "test round 12002", + "shortName": "short name 12002", + "type": "Tournament Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2014-11-02T05:50:51.000+05:00", + "endTime": "2014-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2014-12-02T05:50:52.000+05:00", + "endTime": "2014-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2014-12-06T05:50:51.000+05:00", + "endTime": "2014-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2014-12-08T05:50:51.000+05:00", + "endTime": "2014-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2014-12-10T05:50:51.000+05:00", + "endTime": "2014-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2014-12-12T05:50:51.000+05:00", + "endTime": "2014-12-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2014-12-14T05:50:51.000+05:00", + "endTime": "2014-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12001, + "name": "test round 12001", + "shortName": "short name 12001", + "type": "Single Round Match", + "status": "Active", + "roundTerms": "term1", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-11-02T05:50:51.000+05:00", + "endTime": "2013-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-12-02T05:50:52.000+05:00", + "endTime": "2013-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-12-06T05:50:51.000+05:00", + "endTime": "2013-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-12-08T05:50:51.000+05:00", + "endTime": "2013-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-12-10T05:50:51.000+05:00", + "endTime": "2013-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-12-12T05:50:51.000+05:00", + "endTime": "2013-12-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-12-14T05:50:51.000+05:00", + "endTime": "2013-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12003, + "name": "test round 12003", + "shortName": "short name 12003", + "type": "Practice Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-08-02T04:50:51.000+05:00", + "endTime": "2013-09-02T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-09-02T04:50:52.000+05:00", + "endTime": "2013-09-05T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-09-06T04:50:51.000+05:00", + "endTime": "2013-09-07T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-09-08T04:50:51.000+05:00", + "endTime": "2013-09-09T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-09-10T04:50:51.000+05:00", + "endTime": "2013-09-11T04:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-09-12T04:50:51.000+05:00", + "endTime": "2013-09-13T04:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-09-14T04:50:51.000+05:00", + "endTime": "2013-09-15T04:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12004, + "name": "test round 12004", + "shortName": "short name 12004", + "type": "Screening Tool Problem Sets", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-01-02T05:50:51.000+05:00", + "endTime": "2013-02-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-02-02T05:50:52.000+05:00", + "endTime": "2013-02-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-02-06T05:50:51.000+05:00", + "endTime": "2013-02-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-02-08T05:50:51.000+05:00", + "endTime": "2013-02-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-02-10T05:50:51.000+05:00", + "endTime": "2013-02-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-02-12T05:50:51.000+05:00", + "endTime": "2013-02-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-02-14T05:50:51.000+05:00", + "endTime": "2013-02-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12005, + "name": "test round 12005", + "shortName": "short name 12005", + "type": "Marathon Match", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2011-11-02T05:50:51.000+05:00", + "endTime": "2011-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2011-12-02T05:50:52.000+05:00", + "endTime": "2011-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2011-12-10T05:50:51.000+05:00", + "endTime": "2011-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2011-12-14T05:50:51.000+05:00", + "endTime": "2011-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + } + ] +} \ No newline at end of file diff --git a/test/test_files/rounds/expected_status_parameters.json b/test/test_files/rounds/expected_status_parameters.json new file mode 100644 index 000000000..3acfd05db --- /dev/null +++ b/test/test_files/rounds/expected_status_parameters.json @@ -0,0 +1,308 @@ +{ + "total": 6, + "pageIndex": 1, + "pageSize": 50, + "data": [ + { + "id": 12005, + "name": "test round 12005", + "shortName": "short name 12005", + "type": "Marathon Match", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2011-11-02T05:50:51.000+05:00", + "endTime": "2011-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2011-12-02T05:50:52.000+05:00", + "endTime": "2011-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2011-12-10T05:50:51.000+05:00", + "endTime": "2011-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2011-12-14T05:50:51.000+05:00", + "endTime": "2011-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12004, + "name": "test round 12004", + "shortName": "short name 12004", + "type": "Screening Tool Problem Sets", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-01-02T05:50:51.000+05:00", + "endTime": "2013-02-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-02-02T05:50:52.000+05:00", + "endTime": "2013-02-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-02-06T05:50:51.000+05:00", + "endTime": "2013-02-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-02-08T05:50:51.000+05:00", + "endTime": "2013-02-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-02-10T05:50:51.000+05:00", + "endTime": "2013-02-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-02-12T05:50:51.000+05:00", + "endTime": "2013-02-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-02-14T05:50:51.000+05:00", + "endTime": "2013-02-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12003, + "name": "test round 12003", + "shortName": "short name 12003", + "type": "Practice Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-08-02T04:50:51.000+05:00", + "endTime": "2013-09-02T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-09-02T04:50:52.000+05:00", + "endTime": "2013-09-05T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-09-06T04:50:51.000+05:00", + "endTime": "2013-09-07T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-09-08T04:50:51.000+05:00", + "endTime": "2013-09-09T04:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-09-10T04:50:51.000+05:00", + "endTime": "2013-09-11T04:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-09-12T04:50:51.000+05:00", + "endTime": "2013-09-13T04:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-09-14T04:50:51.000+05:00", + "endTime": "2013-09-15T04:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12001, + "name": "test round 12001", + "shortName": "short name 12001", + "type": "Single Round Match", + "status": "Active", + "roundTerms": "term1", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-11-02T05:50:51.000+05:00", + "endTime": "2013-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-12-02T05:50:52.000+05:00", + "endTime": "2013-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-12-06T05:50:51.000+05:00", + "endTime": "2013-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-12-08T05:50:51.000+05:00", + "endTime": "2013-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-12-10T05:50:51.000+05:00", + "endTime": "2013-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-12-12T05:50:51.000+05:00", + "endTime": "2013-12-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-12-14T05:50:51.000+05:00", + "endTime": "2013-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12002, + "name": "test round 12002", + "shortName": "short name 12002", + "type": "Tournament Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2014-11-02T05:50:51.000+05:00", + "endTime": "2014-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2014-12-02T05:50:52.000+05:00", + "endTime": "2014-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2014-12-06T05:50:51.000+05:00", + "endTime": "2014-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2014-12-08T05:50:51.000+05:00", + "endTime": "2014-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2014-12-10T05:50:51.000+05:00", + "endTime": "2014-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2014-12-12T05:50:51.000+05:00", + "endTime": "2014-12-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2014-12-14T05:50:51.000+05:00", + "endTime": "2014-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + }, + { + "id": 12006, + "name": "test round 12006", + "shortName": "short name 12006", + "type": "Marathon Match Tournament Round", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2015-11-02T05:50:51.000+05:00", + "endTime": "2015-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2015-12-02T05:50:52.000+05:00", + "endTime": "2015-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2015-12-06T05:50:51.000+05:00", + "endTime": "2015-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2015-12-08T05:50:51.000+05:00", + "endTime": "2015-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2015-12-10T05:50:51.000+05:00", + "endTime": "2015-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2015-12-14T05:50:51.000+05:00", + "endTime": "2015-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + } + ] +} \ No newline at end of file diff --git a/test/test_files/rounds/expected_time_parameters.json b/test/test_files/rounds/expected_time_parameters.json new file mode 100644 index 000000000..d9f051fd3 --- /dev/null +++ b/test/test_files/rounds/expected_time_parameters.json @@ -0,0 +1,43 @@ +{ + "total": 1, + "pageIndex": 1, + "pageSize": 50, + "data": [ + { + "id": 12005, + "name": "test round 12005", + "shortName": "short name 12005", + "type": "Marathon Match", + "status": "Active", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2011-11-02T05:50:51.000+05:00", + "endTime": "2011-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2011-12-02T05:50:52.000+05:00", + "endTime": "2011-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2011-12-10T05:50:51.000+05:00", + "endTime": "2011-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2011-12-14T05:50:51.000+05:00", + "endTime": "2011-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + } + ] +} \ No newline at end of file diff --git a/test/test_files/rounds/expected_type_parameters.json b/test/test_files/rounds/expected_type_parameters.json new file mode 100644 index 000000000..100cef4d6 --- /dev/null +++ b/test/test_files/rounds/expected_type_parameters.json @@ -0,0 +1,62 @@ +{ + "total": 1, + "pageIndex": 1, + "pageSize": 50, + "data": [ + { + "id": 12001, + "name": "test round 12001", + "shortName": "short name 12001", + "type": "Single Round Match", + "status": "Active", + "roundTerms": "term1", + "registrationLimit": 1000, + "invitationalType": "Not", + "region": "Alpha", + "roundSchedule": [ + { + "phaseName": "Registration Phase", + "startTime": "2013-11-02T05:50:51.000+05:00", + "endTime": "2013-12-02T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Coding Phase", + "startTime": "2013-12-02T05:50:52.000+05:00", + "endTime": "2013-12-05T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Intermission Phase", + "startTime": "2013-12-06T05:50:51.000+05:00", + "endTime": "2013-12-07T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "Challenge Phase", + "startTime": "2013-12-08T05:50:51.000+05:00", + "endTime": "2013-12-09T05:50:51.000+05:00", + "status": "Past" + }, + { + "phaseName": "System Test Phase", + "startTime": "2013-12-10T05:50:51.000+05:00", + "endTime": "2013-12-11T05:50:51.000+05:00", + "status": "Active" + }, + { + "phaseName": "Moderated Chat Phase", + "startTime": "2013-12-12T05:50:51.000+05:00", + "endTime": "2013-12-13T05:50:51.000+05:00", + "status": "Draft" + }, + { + "phaseName": "Room Assignment Phase", + "startTime": "2013-12-14T05:50:51.000+05:00", + "endTime": "2013-12-15T05:50:51.000+05:00", + "status": "Draft" + } + ] + } + ] +} \ No newline at end of file