«

POST /api/M26/clans/{clanCode}/vouchers -- Tặng voucher cho thành viên

body: { "member": "string", () // user người nhận voucher "bookCodes": ["string"] ()// Danh sách mã voucher } chủ phường có thể tặng voucher cho các thành viên. Không thể tặng quá số lượt tặng của voucher

    • Given Tài khoản "ownerclan20" đã tạo phường với thông tin
      codenamedescriptionmember
      clan_01AutoTestCall APImember1, member2, member3
  • Tags: @AUTOMATED, @TNK-12741

    Không thể tặng voucher cho thành viên nếu không gửi lên x-tenant

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "Bad Request"
      }
  • Tags: @AUTOMATED, @TNK-12741

    Không thể tặng voucher cho thành viên nếu gửi lên x-tenant không hợp lệ

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenant<tenant>
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 404
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "clan_not_found"
      }

    Examples:

    tenant
    null
    taolao
  • Tags: @AUTOMATED, @TNK-12741

    Không thể tặng voucher cho thành viên nếu gửi token không hợp lệ

    • Given Token đã hết hạn
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 401
  • Tags: @AUTOMATED, @TNK-12741

    Không thể tặng voucher cho thành viên nếu không gửi token

    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 401
  • Tags: @AUTOMATED, @TNK-12741

    Trả về 404 khi gửi request tặng voucher với mã phường không tồn tại

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenant<tenant>
    • And Gửi request "POST" đến "/M26/clans/lamgicocaiphuongnay/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 404
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "clan_not_found"
      }
  • Tags: @AUTOMATED, @TNK-12741

    Không thể tặng voucher của phường mà mình không phải là owner

    • Given Tài khoản "ownerclan21" đã tạo phường với thông tin
      codenamedescriptionmember
      clan_02AutoTestCall APImember1
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
      voucher02clan_025totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • And Có token của tài khoản "ownerclan20"
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_02}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "user_not_owner"
      }
  • Tags: @AUTOMATED, @TNK-12741

    Trả về 400 khi gửi request tặng voucher khi không gửi lên thông tin bắt buộc

    • Given Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • And Có token của tài khoản "ownerclan20"
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
      <jsonbody>
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "<title>"
      }

    Examples:

    jsonbody title
    {"member": null,"bookCodes": ["${voucher01}"]} member_is_blank
    {"bookCodes": ["${voucher01}"]} member_is_blank
    {"member": null,"bookCodes": null} member_is_blank
    {"member": "member1","bookCodes": null} book_code_is_null
  • Tags: @AUTOMATED, @TNK-12741

    Trả về 400 khi gửi request tặng voucher cho user không tồn tại trên hệ thống

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
      {"member": "lamgicocaiusernaydaumagui","bookCodes": ["${voucher01}"]}
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "member_not_in_clan"
      }
  • Tags: @AUTOMATED, @TNK-12741

    Trả về 400 khi gửi request tặng voucher cho user không phải là thành viên

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
      {"member": "pamiuoi","bookCodes": ["${voucher01}"]}
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "member_not_in_clan"
      }
  • Tags: @AUTOMATED, @TNK-12741

    Trả về 400 khi gửi request tặng voucher cho thành viên với mã voucher không tồn tại

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
      {"member": "member1","bookCodes": ["lamgicocaivouchernaydauma"]}
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "book_code_not_found"
      }
  • Tags: @AUTOMATED, @TNK-12741

    Trả về 400 khi gửi request tặng voucher cho thành viên với mã voucher không thuộc sở hữu của phường

    • Given Có token của tài khoản "ownerclan20"
    • And Tài khoản "ownerclan21" đã tạo phường với thông tin
      codenamedescriptionmember
      clan_02AutoTestCall APImember4
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
      voucher02clan_025totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher02}"]
      }
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "book_code_not_in_clan"
      }
  • Tags: @AUTOMATED, @TNK-12741

    Trả về 400 khi gửi request tặng voucher cho thành viên với mã voucher đã hết lượt tặng

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_011totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 200
    • When Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member2",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "out_of_voucher"
      }
  • Tags: @AUTOMATED, @TNK-12741

    Trả về 400 khi gửi request tặng voucher cho thành viên nhiều voucher trong đó có mã voucher không hợp lệ

    (không tồn tại, voucher của phường khác)

    • Given Có token của tài khoản "ownerclan20"
    • And Tài khoản "ownerclan21" đã tạo phường với thông tin
      codenamedescriptionmember
      clan_02AutoTestCall APImember4
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
      voucher02<clan>1totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}", "<voucher>"]
      }
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
        "title": "<title>"
      }

    Examples:

    clan voucher title
    clan_01 lamgico book_code_not_found
    clan_02 ${voucher02} book_code_not_in_clan
  • Tags: @AUTOMATED, @TNK-12741

    tặng voucher cho thành viên thành công khi gửi thông tin hợp lệ. Khi đó lượt tặng của voucher sẽ bị giảm đi,

    người nhận sẽ nhận được 1 mã voucher từ voucher gốc và có thông báo.

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 200
    • And Thành viên nhận được voucher có mã "voucher01_01" từ voucher gốc "voucher01"
    • And Response có body thỏa mãn giá trị như sau
      [
         {
          "voucherItemCode": "${voucher01_01}",
          "received": "member1",
          "sender": "ownerclan20",
          "active": true
        }
      ]
    • And Voucher "voucher01" còn lại 4 lượt tặng
    • When Có token của tài khoản "member1"
    • And Gửi request "GET" đến "/M26/notification?page=0&size=1"
    • Then Tôi nhận được response có HTTP Status 200
    • And Response có body thỏa mãn giá trị như sau
         {
          "content": [
              {
                  "username": "member1",
                  "event": "CLAN_ASSIGN_VOUCHER",
                  "content": "Chúc mừng! Chủ phường gửi tặng bạn 1 voucher đặc biệt để tận hưởng những ưu đãi hấp dẫn. Cùng khám phá và sử dụng nhé",
                  "title": "Quà Tặng Từ Chủ Phường!"
              }
          ]
         }
  • Tags: @AUTOMATED, @TNK-12741

    1 thành viên của phường có thể được tặng cho nhiều voucher, mỗi lần tặng thành viên sẽ nhận được 1 mã voucher từ voucher gốc

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
      voucher02clan_015totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}", "${voucher02}"]
      }
    • Then Tôi nhận được response có HTTP Status 200
    • And Thành viên nhận được voucher có mã "voucher01_01, voucher02_01" từ voucher gốc "voucher01, voucher02"
    • And Response có body thỏa mãn giá trị như sau
      [
         {
          "voucherItemCode": "${voucher01_01}",
          "received": "member1",
          "sender": "ownerclan20",
          "active": true
      },
      {
          "voucherItemCode": "${voucher02_01}",
          "received": "member1",
          "sender": "ownerclan20",
          "active": true
      }
      ]
  • Tags: @AUTOMATED, @TNK-12741

    1 voucher có thể được tặng cho nhiều thành viên nếu vẫn còn lượt tặng

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_012totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 200
    • When Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member2",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 200
    • And Thành viên nhận được voucher có mã "voucher01_02" từ voucher gốc "voucher01"
    • And Response có body thỏa mãn giá trị như sau
      [
         {
          "voucherItemCode": "${voucher01_02}",
          "received": "member2",
          "sender": "ownerclan20",
          "active": true
        }
      ]
  • Tags: @AUTOMATED, @TNK-12741

    Voucher chưa đến hạn sử dụng vẫn có thể tặng cho thành viên của phường

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codevalidFromclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher012034-01-01T00:00:00Zclan_012totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 200
    • And Thành viên nhận được voucher có mã "voucher01_02" từ voucher gốc "voucher01"
    • And Response có body thỏa mãn giá trị như sau
      [
         {
          "voucherItemCode": "${voucher01_02}",
          "received": "member1",
          "sender": "ownerclan20",
          "active": true
        }
      ]
  • Tags: @AUTOMATED, @TNK-12741

    Một voucher có thể tặng nhiều lần cho 1 thành viên, Mỗi lần tặng sinh ra một mã voucher khác nhau cho thành viên từ voucher gốc

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_012totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 200
    • And Thành viên nhận được voucher có mã "voucher01_01" từ voucher gốc "voucher01"
    • And Response có body thỏa mãn giá trị như sau
      [
         {
          "voucherItemCode": "${voucher01_01}",
          "received": "member1",
          "sender": "ownerclan20",
          "active": true
      }
      ]
    • And Voucher "voucher01" còn lại 1 lượt tặng
    • When Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 200
    • And Thành viên nhận được voucher có mã "voucher01_02" từ voucher gốc "voucher01"
    • And Response có body thỏa mãn giá trị như sau
      [
         {
          "voucherItemCode": "${voucher01_02}",
          "received": "member1",
          "sender": "ownerclan20",
          "active": true
      }
      ]
    • And Voucher "voucher01" còn lại 0 lượt tặng
  • Tags: @AUTOMATED, @TNK-12741, @TNK-14276

    Không thể tặng voucher nhiều lần cho 1 thành viên nếu quá lượt tặng

    • Given Có token của tài khoản "ownerclan20"
    • And Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_011totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}", "${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
         "title": "book_code_is_duplicate"
      }
  • Tags: @AUTOMATED, @TNK-12741

    Thành viên trong phường không phải là chủ phường thì không thể assign voucher cho thành viên khác trong phường

    • Given Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_012totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • And Có token của tài khoản "member1"
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "<member>",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
         "title": "user_not_owner"
      }

    Examples:

    member
    member2
    ownerclan20
  • Tags: @AUTOMATED, @manual, @TNK-12741

    Không thể tặng voucher đã hết hạn sử dụng

    • Given Tồn tại voucher có thông tin
      codeclanvalidFromvalidTonumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_012024-01-01T00:00:00Z2024-09-01T00:00:00Z2totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • And Có token của tài khoản "ownerclan20"
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "member1",
        "bookCodes": ["${voucher01}"]
      }
    • Then Tôi nhận được response có HTTP Status 400
    • And Response có body thỏa mãn giá trị như sau
      {
         "title": "voucher_expired"
      }
  • Tags: @AUTOMATED, @TNK-12741

    Chủ phường có thể tặng voucher cho chính mình

    • Given Tồn tại voucher có thông tin
      codeclannumberOfVoucherconditiondiscountTypeformulaitemsorderDiscount
      voucher01clan_012totalWeight >= 1PERCENT10[{"fee": "shipping_fee"}]{"maxValue": 5000,"discountLimit": 1000,"orderDiscountType": "totalValue"}
    • And Có token của tài khoản "ownerclan20"
    • When Request có header là
      X-Tenantm26
    • And Gửi request "POST" đến "/M26/clans/${clan_01}/vouchers" với body
       {
        "member": "ownerclan20",
        "bookCodes": ["${voucher01}"]
      }
    • And Thành viên nhận được voucher có mã "voucher01_01" từ voucher gốc "voucher01"
    • And Response có body thỏa mãn giá trị như sau
      [
         {
          "voucherItemCode": "${voucher01_01}",
          "received": "ownerclan20",
          "sender": "ownerclan20",
          "active": true
      }
      ]
    • And Voucher "voucher01" còn lại 1 lượt tặng