Class: SqliteTestHook

Inherits:
Mumukit::Templates::FileHook
  • Object
show all
Defined in:
lib/test_hook.rb

Overview

This Hook allow to run Sqlite Worker from an ad-hoc program that receives .json files.

Instance Method Summary collapse

Constructor Details

#initialize(config = nil) ⇒ SqliteTestHook

Returns a new instance of SqliteTestHook.



12
13
14
15
16
17
18
19
20
# File 'lib/test_hook.rb', line 12

def initialize(config = nil)
  super(config)
  @test_parsers = {
      query: Sqlite::QueryTestParser,
      datasets: Sqlite::DatasetTestParser,
      final_dataset: Sqlite::FinalDatasetTestParser,
  }
  @test_parsers.default = Sqlite::InvalidTestParser
end

Instance Method Details

#command_line(filename) ⇒ Object

Define the command to be run by sqlite worker



28
29
30
# File 'lib/test_hook.rb', line 28

def command_line(filename)
  "runsql #{filename}"
end

#compile_file_content(request) ⇒ Object

Transform Mumuki Request into Docker file style Request = {

test: {
  type: (string) query|dataset,
  seed: (string) sql code to populate tables,
  expected: (string) query sentence | resulting table
},
extra: (string) sql code to create tables,
content: (string) student's solution,
expectations: []    # not using

}



44
45
46
47
48
49
50
51
52
# File 'lib/test_hook.rb', line 44

def compile_file_content(request)
  tests = parse_tests request.test
  final = get_final_query
  {
      init:    request.extra.strip,
      student: request.content.strip << final,
      tests:   tests
  }.to_json
end

#post_process_file(_file, result, status) ⇒ Object

Define how output results Expected:

"expected": [
    "name\nTest 1.1\nTest 1.2\nTest 1.3\n",
    "name\nTest 2.1\nTest 2.2\nTest 2.3\n"
],
"student": [
    "id|name\n1|Test 1.1\n2|Test 1.2\n3|Test 1.3\n",
    "id|name\n1|Test 2.1\n2|Test 2.2\n3|Test 2.3\n"
]



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/test_hook.rb', line 66

def post_process_file(_file, result, status)
  output = JSON.parse(result)

  case status
    when :passed
      expected, student = parse_output output
      framework.test expected, student
    when :failed
      [output['output'], status]
    else
      [output, status]
  end
end

#tempfile_extensionObject

Just define file extension



23
24
25
# File 'lib/test_hook.rb', line 23

def tempfile_extension
  '.json'
end