code: func Insert(t *testing.T, repo grimoire.Repo) {
  	user := User{}
  	repo.From(users).MustSave(&user)
  
  	tests := []struct {
  		query  grimoire.Query
  		record interface{}
  		input  params.Params
  	}{
  		{repo.From(users), &User{}, params.Map{}},
  		{repo.From(users), &User{}, params.Map{"name": "insert", "age": 100}},
  		{repo.From(users), &User{}, params.Map{"name": "insert", "age": 100, "note": "note"}},
  		{repo.From(users), &User{}, params.Map{"note": "note"}},
  		{repo.From(addresses), &Address{}, params.Map{}},
  		{repo.From(addresses), &Address{}, params.Map{"address": "address"}},
  		{repo.From(addresses), &Address{}, params.Map{"user_id": user.ID}},
  		{repo.From(addresses), &Address{}, params.Map{"address": "address", "user_id": user.ID}},
  	}
  
  	for _, test := range tests {
  		ch := changeset.Cast(test.record, test.input, []string{"name", "age", "note", "address", "user_id"})
  		statement, _ := builder.Insert(test.query.Collection, ch.Changes())
  
  		t.Run("Insert|"+statement, func(t *testing.T) {
  			assert.Nil(t, ch.Error())
  
  			assert.Nil(t, test.query.Insert(nil, ch))
  			assert.Nil(t, test.query.Insert(test.record, ch))
  
  			// multiple insert
  			assert.Nil(t, test.query.Insert(nil, ch, ch, ch))
  		})
  	}
  }
docs: // Insert tests insert specifications.