The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# vi:filetype=
use OpenResty::Config;
my $reason;
BEGIN {
    OpenResty::Config->init;
    if ($OpenResty::Config{'backend.type'} eq 'PgMocked' ||
        $OpenResty::Config{'backend.recording'}) {
        $reason = 'Skipped in PgMocked or recording mode here.';
    }
    #undef $reason;
}
use t::OpenResty $reason ? (skip_all => $reason) : ();

plan tests => 3 * blocks();

run_tests;

__DATA__

=== TEST 1: UTF-8
--- charset: UTF-8
--- request
DELETE /=/model?_user=$TestAccount&_password=$TestPass&_use_cookie=1
--- response
{"success":1}



=== TEST 2: GBK
--- charset: GBK
--- request
DELETE /=/model?_charset=GBK
--- response
{"success":1}



=== TEST 3: Create a model in GBK
--- charset: GBK
--- request
POST /=/model/Foo?_charset=GBK
{ 
    "description": "你好么?", 
    "columns": [
        {"name":"bar","type":"text","label":"嘿嘿"}
    ] 
}
--- response
{"success":1}



=== TEST 4: Check the data in GB2312
--- charset: GB2312
--- request
GET /=/model/Foo?_charset=GB2312
--- response
{
    "columns":[
        {"name":"id","label":"ID","type":"serial"},
        {"unique":false,"not_null":false,"name":"bar","default":null,"label":"嘿嘿","type":"text"}
    ],
    "name":"Foo",
    "description":"你好么?"
}



=== TEST 5: Check the data in utf8
--- charset: utf8
--- request
GET /=/model/Foo?_charset=utf8
--- response
{"columns":[
    {"name":"id","label":"ID","type":"serial"},
    {"name":"bar","default":null,"label":"嘿嘿","type":"text","unique":false,"not_null":false}
    ],
    "name":"Foo","description":"你好么?"}



=== TEST 6: Check the data in big5
--- charset: big5
--- request
GET /=/model/Foo?_charset=big5
--- response
{
    "columns":[
        {"name":"id","label":"ID","type":"serial"},
        {"unique":false,"not_null":false,"name":"bar","default":null,"label":"嘿嘿","type":"text"}
    ],
    "name":"Foo",
    "description":"你好么?"
}



=== TEST 7: Check the data in latin1
--- charset: latin-1
--- request
GET /=/model/Foo/bar?_charset=latin-1
--- response
{"name":"bar","default":null,"label":"??","type":"text","unique":false,"not_null":false}



=== TEST 8: Insert records in Big5
--- charset: Big5
--- request
POST /=/model/Foo/~/~?_charset=Big5
{ "bar": "廣告服務" }
--- response
{"success":1,"rows_affected":1,"last_row":"/=/model/Foo/id/1"}



=== TEST 9: Check the record
--- request
GET /=/model/Foo/~/~
--- response
[{"bar":"廣告服務","id":"1"}]



=== TEST 10: Check the record (in YAML)
--- request
GET /=/model/Foo/~/~.yml
--- format: YAML
--- response
--- 
- 
  bar: 廣告服務
  id: 1



=== TEST 11: Insert records in Big5
--- charset: Big5
--- request
GET /=/model/Foo/~/~?_charset=Big5
--- response
[{"bar":"廣告服務","id":"1"}]



=== TEST 12: Create a model in UTF-8
--- charset: UTF-8
--- request
POST /=/model/Utf8?_charset=guessing
{ "description": "文字编码测试utf8",
    "columns": [{"name":"bar","type":"text", "label":"我们的open api"}] }
--- response
{"success":1}



=== TEST 13: Check the data in UTF-8
--- charset: UTF-8
--- request
GET /=/model/Utf8?_charset=UTF-8
--- response
{
  "columns":[
    {"name":"id","label":"ID","type":"serial"},
    {"name":"bar","default":null,"label":"我们的open api","type":"text","unique":false,"not_null":false}
  ],
  "name":"Utf8",
  "description":"文字编码测试utf8"
}



=== TEST 14: Create a model in GBK
--- charset: GBK
--- request
POST /=/model/Gbk?_charset=guessing
{ "description": "文字编码测试GBK 张皛珏 万珣新",
    "columns": [{"name":"bar","type":"text", "label":"我们的open api"}] }
--- response
{"success":1}



=== TEST 15: Check the data in UTF-8
--- charset: UTF-8
--- request
GET /=/model/Gbk?_charset=UTF-8
--- response
{
  "columns":[
    {"name":"id","label":"ID","type":"serial"},
    {"name":"bar","default":null,"label":"我们的open api","type":"text","unique":false,"not_null":false}
  ],
  "name":"Gbk",
  "description":"文字编码测试GBK 张皛珏 万珣新"
}



=== TEST 16: Create a model in GB2312
--- charset: GB2312
--- request
POST /=/model/Gb2312?_charset=guessing
{ "description": "文字编码测试GB2312",
    "columns": [{"name":"bar","type":"text","label":"我们的open api"}] }
--- response
{"success":1}



=== TEST 17: Check the data in UTF-8
--- charset: UTF-8
--- request
GET /=/model/Gb2312?_charset=UTF-8
--- response
{
  "columns":[
    {"name":"id","label":"ID","type":"serial"},
    {"name":"bar","default":null,"label":"我们的open api","type":"text","unique":false,"not_null":false}
  ],
  "name":"Gb2312",
  "description":"文字编码测试GB2312"
}



=== TEST 18: Create a model in big5
--- charset: Big5
--- request
POST /=/model/Big5?_charset=guessing
{ "description": "文字編碼測試big5", "columns":
    [{"name":"bar","type":"text","label":"我們的open api"}] }
--- response
{"success":1}



=== TEST 19: Check the data in UTF-8
--- charset: UTF-8
--- request
GET /=/model/Big5?_charset=UTF-8
--- response
{
  "columns":[
    {"name":"id","label":"ID","type":"serial"},
    {"name":"bar","default":null,"label":"我們的open api","type":"text","unique":false,"not_null":false}
  ],
  "name":"Big5",
  "description":"文字編碼測試big5"
}



=== TEST 20: POST utf-8 chars
--- charset: UTF-8
--- request
POST /=/model/Big5/~/~
{"bar":"你好么?"}
--- response
{"success":1,"rows_affected":1,"last_row":"/=/model/Big5/id/1"}



=== TEST 21: Get the row
--- request
GET /=/model/Big5/id/1
--- response
[{"bar":"你好么?","id":"1"}]



=== TEST 22: logout
--- request
GET /=/logout
--- response
{"success":1}