---
setup:
  - do:
        indices.create:
          index: test_index
          body:
              mappings:
                test_type:
                  properties:
                    t1:
                      type:     string
                    t2:
                      type:     string
                    obj:
                      path:     just_name
                      properties:
                        t1:
                          type:   string
                        i_t1:
                          type:   string
                          index_name: t1
                        i_t3:
                          type:   string
                          index_name: t3

  - do:
        indices.create:
          index: test_index_2
          body:
              mappings:
                test_type_2:
                  properties:
                    t1:
                      type:     string
                    t2:
                      type:     string
                    obj:
                      path:     just_name
                      properties:
                        t1:
                          type:   string
                        i_t1:
                          type:   string
                          index_name: t1
                        i_t3:
                          type:   string
                          index_name: t3

  - do:
      cluster.health:
          wait_for_status: yellow

---
"Get field mapping with * for fields":

  - do:
      indices.get_field_mapping:
        field: "*"

  - match: {test_index.mappings.test_type.t1.full_name:     t1     }
  - match: {test_index.mappings.test_type.t2.full_name:     t2     }
  - match: {test_index.mappings.test_type.obj\.t1.full_name: obj.t1 }
  - match: {test_index.mappings.test_type.obj\.i_t1.full_name: obj.i_t1 }
  - match: {test_index.mappings.test_type.obj\.i_t3.full_name: obj.i_t3 }

---
"Get field mapping with t* for fields":

  - do:
      indices.get_field_mapping:
        index: test_index
        field: "t*"

# i_t1 matches the pattern using it's index name, but t1 already means a full name
# of a field and thus takes precedence.
  - match:  {test_index.mappings.test_type.t1.full_name:     t1       }
  - match:  {test_index.mappings.test_type.t2.full_name:     t2       }
  - match:  {test_index.mappings.test_type.t3.full_name:     obj.i_t3 }
  - length: {test_index.mappings.test_type: 3}

---
"Get field mapping with *t1 for fields":

  - do:
      indices.get_field_mapping:
        index: test_index
        field: "*t1"
  - match:  {test_index.mappings.test_type.t1.full_name:        t1       }
  - match:  {test_index.mappings.test_type.obj\.t1.full_name:   obj.t1   }
  - match:  {test_index.mappings.test_type.obj\.i_t1.full_name: obj.i_t1 }
  - length: {test_index.mappings.test_type: 3}

---
"Get field mapping with wildcarded relative names":

  - do:
      indices.get_field_mapping:
        index: test_index
        field: "i_*"
  - match:  {test_index.mappings.test_type.i_t1.full_name: obj.i_t1 }
  - match:  {test_index.mappings.test_type.i_t3.full_name: obj.i_t3 }
  - length: {test_index.mappings.test_type: 2}

---
"Get field mapping should work using '_all' for indices and types":

  - do:
      indices.get_field_mapping:
        index: _all
        type: _all
        field: "i_*"
  - match:  {test_index.mappings.test_type.i_t1.full_name: obj.i_t1 }
  - match:  {test_index.mappings.test_type.i_t3.full_name: obj.i_t3 }
  - length: {test_index.mappings.test_type: 2}
  - match:  {test_index_2.mappings.test_type_2.i_t1.full_name: obj.i_t1 }
  - match:  {test_index_2.mappings.test_type_2.i_t3.full_name: obj.i_t3 }
  - length: {test_index_2.mappings.test_type_2: 2}

---
"Get field mapping should work using '*' for indices and types":

  - do:
      indices.get_field_mapping:
        index: '*'
        type: '*'
        field: "i_*"
  - match:  {test_index.mappings.test_type.i_t1.full_name: obj.i_t1 }
  - match:  {test_index.mappings.test_type.i_t3.full_name: obj.i_t3 }
  - length: {test_index.mappings.test_type: 2}
  - match:  {test_index_2.mappings.test_type_2.i_t1.full_name: obj.i_t1 }
  - match:  {test_index_2.mappings.test_type_2.i_t3.full_name: obj.i_t3 }
  - length: {test_index_2.mappings.test_type_2: 2}

---
"Get field mapping should work using comma_separated values for indices and types":

  - do:
      indices.get_field_mapping:
        index: 'test_index,test_index_2'
        type: 'test_type,test_type_2'
        field: "i_*"
  - match:  {test_index.mappings.test_type.i_t1.full_name: obj.i_t1 }
  - match:  {test_index.mappings.test_type.i_t3.full_name: obj.i_t3 }
  - length: {test_index.mappings.test_type: 2}
  - match:  {test_index_2.mappings.test_type_2.i_t1.full_name: obj.i_t1 }
  - match:  {test_index_2.mappings.test_type_2.i_t3.full_name: obj.i_t3 }
  - length: {test_index_2.mappings.test_type_2: 2}

