Files
apinto/utils/json_test.go

1504 lines
37 KiB
Go

package utils
import (
"encoding/json"
"testing"
)
// 官方格式json Schema
var test1 = `
{
"properties":{
"field0":{
"example":"abcd",
"type":"string"
},
"field1":{
"example":123.12,
"type":"number"
},
"field3":{
"properties":{
"field3_1":{
"type":"string"
},
"field3_2":{
"properties":{
"field3_2_1":{
"example":true,
"type":"boolean"
},
"field3_2_2":{
"items":{
"example":155.55,
"type":"integer"
},
"type":"array"
}
},
"type":"object"
}
},
"type":"object"
},
"field2":{
"items":{
"type":"string"
},
"type":"array"
}
},
"type":"object"
}`
/*
mockJs template
var template = {
'name': '@cname', // 生成中文名字
'age|18-30': 20, // 生成18~30之间的随机整数
'gender|1': ['男', '女'], // 从数组中随机选取一个元素
'email': '@email' // 生成邮箱
}
Mock.toJSONSchema(template)生成的json schema
*/
var mock1 = `{
"template": {
"name": "@cname",
"age|18-30": 20,
"gender|1": [
"男",
"女"
],
"email": "@email"
},
"type": "object",
"rule": {},
"path": [
"ROOT"
],
"properties": [
{
"name": "name",
"template": "@cname",
"type": "string",
"rule": {},
"path": [
"ROOT",
"name"
]
},
{
"name": "age",
"template": 20,
"type": "number",
"rule": {
"parameters": [
"age|18-30",
"age",
null,
"18-30",
null
],
"range": [
"18-30",
"18",
"30"
],
"min": 18,
"max": 30,
"count": 22
},
"path": [
"ROOT",
"age"
]
},
{
"name": "gender",
"template": [
"男",
"女"
],
"type": "array",
"rule": {
"parameters": [
"gender|1",
"gender",
null,
"1",
null
],
"range": [
"1",
"1",
null
],
"min": 1,
"count": 1
},
"path": [
"ROOT",
"gender"
],
"items": [
{
"name": 0,
"template": "男",
"type": "string",
"rule": {},
"path": [
"ROOT",
"gender",
0
]
},
{
"name": 1,
"template": "女",
"type": "string",
"rule": {},
"path": [
"ROOT",
"gender",
1
]
}
]
},
{
"name": "email",
"template": "@email",
"type": "string",
"rule": {},
"path": [
"ROOT",
"email"
]
}
]
}`
/*
mockJs template
var template = {
'list|1-10': [{
'id|+1': 1,
'email': '@EMAIL'
}]
}
Mock.toJSONSchema(template)生成的json schema
*/
var mock2 = `{
"template": {
"list|1-10": [
{
"id|+1": 7,
"email": "@EMAIL"
}
]
},
"type": "object",
"rule": {},
"path": [
"ROOT"
],
"properties": [
{
"name": "list",
"template": [
{
"id|+1": 7,
"email": "@EMAIL"
}
],
"type": "array",
"rule": {
"parameters": [
"list|1-10",
"list",
null,
"1-10",
null
],
"range": [
"1-10",
"1",
"10"
],
"min": 1,
"max": 10,
"count": 2
},
"path": [
"ROOT",
"list"
],
"items": [
{
"name": 0,
"template": {
"id|+1": 7,
"email": "@EMAIL"
},
"type": "object",
"rule": {},
"path": [
"ROOT",
"list",
0
],
"properties": [
{
"name": "id",
"template": 7,
"type": "number",
"rule": {
"parameters": [
"id|+1",
"id",
"1",
null,
null
]
},
"path": [
"ROOT",
"list",
0,
"id"
]
},
{
"name": "email",
"template": "@EMAIL",
"type": "string",
"rule": {},
"path": [
"ROOT",
"list",
0,
"email"
]
}
]
}
]
}
]
}`
/*
var template = {
'list|1-10': {
'id|+1': 1,
'email': '@EMAIL'
}
}
*/
var mock3 = `{
"template": {
"list|1-10": {
"id|+1": 1,
"email": "@EMAIL"
}
},
"type": "object",
"rule": {},
"path": [
"ROOT"
],
"properties": [
{
"name": "list",
"template": {
"id|+1": 1,
"email": "@EMAIL"
},
"type": "object",
"rule": {
"parameters": [
"list|1-10",
"list",
null,
"1-10",
null
],
"range": [
"1-10",
"1",
"10"
],
"min": 1,
"max": 10,
"count": 4
},
"path": [
"ROOT",
"list"
],
"properties": [
{
"name": "id",
"template": 1,
"type": "number",
"rule": {
"parameters": [
"id|+1",
"id",
"1",
null,
null
]
},
"path": [
"ROOT",
"list",
"id"
]
},
{
"name": "email",
"template": "@EMAIL",
"type": "string",
"rule": {},
"path": [
"ROOT",
"list",
"email"
]
}
]
}
]
}`
/*
var template = {
'key|1-10': '★'
}
*/
var mock4 = `{
"template": {
"key|1-10": "★"
},
"type": "object",
"rule": {},
"path": [
"ROOT"
],
"properties": [
{
"name": "key",
"template": "★",
"type": "string",
"rule": {
"parameters": [
"key|1-10",
"key",
null,
"1-10",
null
],
"range": [
"1-10",
"1",
"10"
],
"min": 1,
"max": 10,
"count": 2
},
"path": [
"ROOT",
"key"
]
}
]
}`
/*
var template = {
'title': 'Syntax Demo',
'string1|1-10': '★',
'string2|3': 'value',
'number1|+1': 100,
'number2|1-100': 100,
'number3|1-100.1-10': 1,
'number4|123.1-10': 1,
'number5|123.3': 1,
'number6|123.10': 1.123,
'boolean1|1': true,
'boolean2|1-2': true,
'object1|2-4': {
'110000': '北京市',
'120000': '天津市',
'130000': '河北省',
'140000': '山西省'
},
'object2|2': {
'310000': '上海市',
'320000': '江苏省',
'330000': '浙江省',
'340000': '安徽省'
},
'object3|2': {
'310000': '@name',
'320000': '@ip',
'330000': '@email'
},
'array1|1': ['AMD', 'CMD', 'KMD', 'UMD'],
'array2|1-10': [{
'id':10,
'ip':'@ip'
}],
'array3|3': ['Mock.js'],
'array4|3-5': [10,20,30,40]
}
*/
var mock5 = `{
"template": {
"title": "Syntax Demo",
"string1|1-10": "★",
"string2|3": "value",
"number1|+1": 101,
"number2|1-100": 100,
"number3|1-100.1-10": 1,
"number4|123.1-10": 1,
"number5|123.3": 1,
"number6|123.10": 1.123,
"boolean1|1": true,
"boolean2|1-2": true,
"object1|2-4": {
"110000": "北京市",
"120000": "天津市",
"130000": "河北省",
"140000": "山西省"
},
"object2|2": {
"310000": "上海市",
"320000": "江苏省",
"330000": "浙江省",
"340000": "安徽省"
},
"object3|2": {
"310000": "@name",
"320000": "@ip",
"330000": "@email"
},
"array1|1": [
"AMD",
"CMD",
"KMD",
"UMD"
],
"array2|1-10": [
{
"id": 10,
"ip": "@ip"
}
],
"array3|3": [
"Mock.js"
],
"array4|3-5": [
10,
20,
30,
40
]
},
"type": "object",
"rule": {},
"path": [
"ROOT"
],
"properties": [
{
"name": "title",
"template": "Syntax Demo",
"type": "string",
"rule": {},
"path": [
"ROOT",
"title"
]
},
{
"name": "string1",
"template": "★",
"type": "string",
"rule": {
"parameters": [
"string1|1-10",
"string1",
null,
"1-10",
null
],
"range": [
"1-10",
"1",
"10"
],
"min": 1,
"max": 10,
"count": 5
},
"path": [
"ROOT",
"string1"
]
},
{
"name": "string2",
"template": "value",
"type": "string",
"rule": {
"parameters": [
"string2|3",
"string2",
null,
"3",
null
],
"range": [
"3",
"3",
null
],
"min": 3,
"count": 3
},
"path": [
"ROOT",
"string2"
]
},
{
"name": "number1",
"template": 101,
"type": "number",
"rule": {
"parameters": [
"number1|+1",
"number1",
"1",
null,
null
]
},
"path": [
"ROOT",
"number1"
]
},
{
"name": "number2",
"template": 100,
"type": "number",
"rule": {
"parameters": [
"number2|1-100",
"number2",
null,
"1-100",
null
],
"range": [
"1-100",
"1",
"100"
],
"min": 1,
"max": 100,
"count": 61
},
"path": [
"ROOT",
"number2"
]
},
{
"name": "number3",
"template": 1,
"type": "number",
"rule": {
"parameters": [
"number3|1-100.1-10",
"number3",
null,
"1-100",
"1-10"
],
"range": [
"1-100",
"1",
"100"
],
"min": 1,
"max": 100,
"count": 70,
"decimal": [
"1-10",
"1",
"10"
],
"dmin": 1,
"dmax": 10,
"dcount": 6
},
"path": [
"ROOT",
"number3"
]
},
{
"name": "number4",
"template": 1,
"type": "number",
"rule": {
"parameters": [
"number4|123.1-10",
"number4",
null,
"123",
"1-10"
],
"range": [
"123",
"123",
null
],
"min": 123,
"count": 123,
"decimal": [
"1-10",
"1",
"10"
],
"dmin": 1,
"dmax": 10,
"dcount": 7
},
"path": [
"ROOT",
"number4"
]
},
{
"name": "number5",
"template": 1,
"type": "number",
"rule": {
"parameters": [
"number5|123.3",
"number5",
null,
"123",
"3"
],
"range": [
"123",
"123",
null
],
"min": 123,
"count": 123,
"decimal": [
"3",
"3",
null
],
"dmin": 3,
"dmax": null,
"dcount": 3
},
"path": [
"ROOT",
"number5"
]
},
{
"name": "number6",
"template": 1.123,
"type": "number",
"rule": {
"parameters": [
"number6|123.10",
"number6",
null,
"123",
"10"
],
"range": [
"123",
"123",
null
],
"min": 123,
"count": 123,
"decimal": [
"10",
"10",
null
],
"dmin": 10,
"dmax": null,
"dcount": 10
},
"path": [
"ROOT",
"number6"
]
},
{
"name": "boolean1",
"template": true,
"type": "boolean",
"rule": {
"parameters": [
"boolean1|1",
"boolean1",
null,
"1",
null
],
"range": [
"1",
"1",
null
],
"min": 1,
"count": 1
},
"path": [
"ROOT",
"boolean1"
]
},
{
"name": "boolean2",
"template": true,
"type": "boolean",
"rule": {
"parameters": [
"boolean2|1-2",
"boolean2",
null,
"1-2",
null
],
"range": [
"1-2",
"1",
"2"
],
"min": 1,
"max": 2,
"count": 2
},
"path": [
"ROOT",
"boolean2"
]
},
{
"name": "object1",
"template": {
"110000": "北京市",
"120000": "天津市",
"130000": "河北省",
"140000": "山西省"
},
"type": "object",
"rule": {
"parameters": [
"object1|2-4",
"object1",
null,
"2-4",
null
],
"range": [
"2-4",
"2",
"4"
],
"min": 2,
"max": 4,
"count": 4
},
"path": [
"ROOT",
"object1"
],
"properties": [
{
"name": "110000",
"template": "北京市",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object1",
"110000"
]
},
{
"name": "120000",
"template": "天津市",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object1",
"120000"
]
},
{
"name": "130000",
"template": "河北省",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object1",
"130000"
]
},
{
"name": "140000",
"template": "山西省",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object1",
"140000"
]
}
]
},
{
"name": "object2",
"template": {
"310000": "上海市",
"320000": "江苏省",
"330000": "浙江省",
"340000": "安徽省"
},
"type": "object",
"rule": {
"parameters": [
"object2|2",
"object2",
null,
"2",
null
],
"range": [
"2",
"2",
null
],
"min": 2,
"count": 2
},
"path": [
"ROOT",
"object2"
],
"properties": [
{
"name": "310000",
"template": "上海市",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object2",
"310000"
]
},
{
"name": "320000",
"template": "江苏省",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object2",
"320000"
]
},
{
"name": "330000",
"template": "浙江省",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object2",
"330000"
]
},
{
"name": "340000",
"template": "安徽省",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object2",
"340000"
]
}
]
},
{
"name": "object3",
"template": {
"310000": "@name",
"320000": "@ip",
"330000": "@email"
},
"type": "object",
"rule": {
"parameters": [
"object3|2",
"object3",
null,
"2",
null
],
"range": [
"2",
"2",
null
],
"min": 2,
"count": 2
},
"path": [
"ROOT",
"object3"
],
"properties": [
{
"name": "310000",
"template": "@name",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object3",
"310000"
]
},
{
"name": "320000",
"template": "@ip",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object3",
"320000"
]
},
{
"name": "330000",
"template": "@email",
"type": "string",
"rule": {},
"path": [
"ROOT",
"object3",
"330000"
]
}
]
},
{
"name": "array1",
"template": [
"AMD",
"CMD",
"KMD",
"UMD"
],
"type": "array",
"rule": {
"parameters": [
"array1|1",
"array1",
null,
"1",
null
],
"range": [
"1",
"1",
null
],
"min": 1,
"count": 1
},
"path": [
"ROOT",
"array1"
],
"items": [
{
"name": 0,
"template": "AMD",
"type": "string",
"rule": {},
"path": [
"ROOT",
"array1",
0
]
},
{
"name": 1,
"template": "CMD",
"type": "string",
"rule": {},
"path": [
"ROOT",
"array1",
1
]
},
{
"name": 2,
"template": "KMD",
"type": "string",
"rule": {},
"path": [
"ROOT",
"array1",
2
]
},
{
"name": 3,
"template": "UMD",
"type": "string",
"rule": {},
"path": [
"ROOT",
"array1",
3
]
}
]
},
{
"name": "array2",
"template": [
{
"id": 10,
"ip": "@ip"
}
],
"type": "array",
"rule": {
"parameters": [
"array2|1-10",
"array2",
null,
"1-10",
null
],
"range": [
"1-10",
"1",
"10"
],
"min": 1,
"max": 10,
"count": 1
},
"path": [
"ROOT",
"array2"
],
"items": [
{
"name": 0,
"template": {
"id": 10,
"ip": "@ip"
},
"type": "object",
"rule": {},
"path": [
"ROOT",
"array2",
0
],
"properties": [
{
"name": "id",
"template": 10,
"type": "number",
"rule": {},
"path": [
"ROOT",
"array2",
0,
"id"
]
},
{
"name": "ip",
"template": "@ip",
"type": "string",
"rule": {},
"path": [
"ROOT",
"array2",
0,
"ip"
]
}
]
}
]
},
{
"name": "array3",
"template": [
"Mock.js"
],
"type": "array",
"rule": {
"parameters": [
"array3|3",
"array3",
null,
"3",
null
],
"range": [
"3",
"3",
null
],
"min": 3,
"count": 3
},
"path": [
"ROOT",
"array3"
],
"items": [
{
"name": 0,
"template": "Mock.js",
"type": "string",
"rule": {},
"path": [
"ROOT",
"array3",
0
]
}
]
},
{
"name": "array4",
"template": [
10,
20,
30,
40
],
"type": "array",
"rule": {
"parameters": [
"array4|3-5",
"array4",
null,
"3-5",
null
],
"range": [
"3-5",
"3",
"5"
],
"min": 3,
"max": 5,
"count": 5
},
"path": [
"ROOT",
"array4"
],
"items": [
{
"name": 0,
"template": 10,
"type": "number",
"rule": {},
"path": [
"ROOT",
"array4",
0
]
},
{
"name": 1,
"template": 20,
"type": "number",
"rule": {},
"path": [
"ROOT",
"array4",
1
]
},
{
"name": 2,
"template": 30,
"type": "number",
"rule": {},
"path": [
"ROOT",
"array4",
2
]
},
{
"name": 3,
"template": 40,
"type": "number",
"rule": {},
"path": [
"ROOT",
"array4",
3
]
}
]
}
]
}`
var mock6 = `{
"template": {
"users|1": [
{
"email": "@email",
"name": "@name",
"ip": "@ip"
}
]
},
"type": "object",
"rule": {},
"path": [
"ROOT"
],
"properties": [
{
"name": "users",
"template": [
{
"email": "@email",
"name": "@name",
"ip": "@ip"
}
],
"type": "array",
"rule": {
"parameters": [
"users|1",
"users",
null,
"1",
null
],
"range": [
"1",
"1",
null
],
"min": 1,
"count": 1
},
"path": [
"ROOT",
"users"
],
"items": [
{
"name": 0,
"template": {
"email": "@email",
"name": "@name",
"ip": "@ip"
},
"type": "object",
"rule": {},
"path": [
"ROOT",
"users",
0
],
"properties": [
{
"name": "email",
"template": "@email",
"type": "string",
"rule": {},
"path": [
"ROOT",
"users",
0,
"email"
]
},
{
"name": "name",
"template": "@name",
"type": "string",
"rule": {},
"path": [
"ROOT",
"users",
0,
"name"
]
},
{
"name": "ip",
"template": "@ip",
"type": "string",
"rule": {},
"path": [
"ROOT",
"users",
0,
"ip"
]
}
]
}
]
}
]
}`
var mock7 = `{
"template": {
"users|1-10": [
10,
20
]
},
"type": "object",
"rule": {},
"path": [
"ROOT"
],
"properties": [
{
"name": "users",
"template": [
10,
20
],
"type": "array",
"rule": {
"parameters": [
"users|1-10",
"users",
null,
"1-10",
null
],
"range": [
"1-10",
"1",
"10"
],
"min": 1,
"max": 10,
"count": 2
},
"path": [
"ROOT",
"users"
],
"items": [
{
"name": 0,
"template": 10,
"type": "number",
"rule": {},
"path": [
"ROOT",
"users",
0
]
},
{
"name": 1,
"template": 20,
"type": "number",
"rule": {},
"path": [
"ROOT",
"users",
1
]
}
]
}
]
}`
func TestJsonSchemaMockJsUnmarshal(t *testing.T) {
type args struct {
valueMap interface{}
}
valueMap := make(map[string]interface{})
json.Unmarshal([]byte(mock7), &valueMap)
tests := []struct {
name string
args args
want interface{}
}{
{
name: "",
args: args{
valueMap: valueMap,
},
want: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := JsonSchemaMockJsUnmarshal(tt.args.valueMap)
bytes, _ := json.Marshal(got)
t.Logf(string(bytes))
})
}
}