// ----------------------------------
// Test Case
// ----------------------------------
var TestCase = Class.create(Model, {
  initialize: function($super) {
    $super(['id', 'label', 'number', 'inputs', 'outputs', 'pre', 'driver', 'post', 'return_code', 'timeout', 'test_set_id', 'show_diff', 'validator'], 'test_case', testCaseStore);
  }
});
var testCaseStore = new ModelStore('test_case', TestCase);
///testCaseStore.load();


// drop down menus for pre, post and driver code for a test case
new ValueObserver('edit_test_case_label', testCaseStore.proxy, 'label');
new ValueObserver('edit_test_case_number', testCaseStore.proxy, 'number');
new ValueObserver('edit_test_case_return_code', testCaseStore.proxy, 'return_code');
new ValueObserver('edit_test_case_timeout', testCaseStore.proxy, 'timeout');
new CheckedObserver('edit_test_case_show_diff', testCaseStore.proxy, 'show_diff');
new CheckedObserver('edit_test_case_validator', testCaseStore.proxy, 'validator');
new SelectableStoreObserver('edit_test_case_pre', testCodeStore, 'id', 'name', testCaseStore.proxy, 'pre', true, false);
new SelectableStoreObserver('edit_test_case_driver', testCodeStore, 'id', 'name', testCaseStore.proxy, 'driver', true, false);
new SelectableStoreObserver('edit_test_case_post', testCodeStore, 'id', 'name', testCaseStore.proxy, 'post', true, false);
var inputbla = new MultipleSelectableStoreObserver('edit_test_case_inputs', fileStore, 'id', 'label', testCaseStore.proxy, 'inputs', function(object) {
  var type = object.get('type');
  return type == fileTypeEnum['Standard Input'] || type == fileTypeEnum['Function IO'] || type == fileTypeEnum['Command Arguments'] || type == fileTypeEnum['Normal'] || type == fileTypeEnum['Class Prototype'];
});
new MultipleSelectableStoreObserver('edit_test_case_outputs', fileStore, 'id', 'label', testCaseStore.proxy, 'outputs', function(object){
  var type = object.get('type');
  return type == fileTypeEnum['Standard Output'] || type == fileTypeEnum['Standard Error'] || type == fileTypeEnum['Normal'] || type == fileTypeEnum['Standard IO'] || type == fileTypeEnum['Class IO'];
});

// special menu of test cases, limited to the set of test cases the current test set has enabled
new SelectableProxyStoreObserverLimitedIDs('test_cases', testCaseStore, 'id', 'label', testSetStore.proxy, 'tests');

// save works as usual
new SaveAction('save_test_case', testCaseStore, 'click');

$('new_test_case').observe('click', function(event) {
  testCase = new TestCase();
  testCase.set('test_set_id', testSetStore.proxy.get('id'));
  
  testCase.requestNewRecord(null, function(object) {
    testCaseIDs = testSetStore.proxy.get('tests');
    testCaseIDs.push(object.get('id'));
    testSetStore.proxy.set('tests', testCaseIDs);

    // force an update as well (there may have been other tests added by other users)
    testSetStore.proxy.reload();
  });
});

$('delete_test_case').observe('click', function(event) {
  testCaseStore.proxy.destroy(
    function(object) {
      testCaseIDs = testSetStore.proxy.get('tests');
      testCaseIDs = testCaseIDs.without(testCaseStore.proxy.get('id'));
      testSetStore.proxy.set('tests', testCaseIDs);
    },
    
    function(object) {
      // force an update as well (there may have been other tests deleted by other users)
      testSetStore.proxy.reload();
  });
});
