diff --git a/Gemfile.lock b/Gemfile.lock index c5ba369..0f3222b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - printavo-ruby (0.15.0) + printavo-ruby (0.16.0) faraday (~> 2.0) faraday-retry (~> 2.0) thor (~> 1.0) @@ -236,7 +236,7 @@ CHECKSUMS notiffany (0.1.3) sha256=d37669605b7f8dcb04e004e6373e2a780b98c776f8eb503ac9578557d7808738 parallel (1.27.0) sha256=4ac151e1806b755fb4e2dc2332cbf0e54f2e24ba821ff2d3dcf86bf6dc4ae130 parser (3.3.11.1) sha256=d17ace7aabe3e72c3cc94043714be27cc6f852f104d81aa284c2281aecc65d54 - printavo-ruby (0.15.0) + printavo-ruby (0.16.0) prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85 pry (0.16.0) sha256=d76c69065698ed1f85e717bd33d7942c38a50868f6b0673c636192b3d1b6054e public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623 diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index f9767ca..c6d2eef 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,37 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.16.0] - 2026-04-01 + +### Added +- `Printavo::Enums` namespace — 18 enum modules covering every GraphQL enum in the + Printavo V2 schema (excluding `__DirectiveLocation` and `__TypeKind`, which are + GraphQL introspection internals): + - `ApprovalRequestStatus` — APPROVED, PENDING, REVOKED, UNAPPROVED + - `ContactSortField` — CREATED_AT, EMAIL, FIRST_NAME, LAST_NAME, UPDATED_AT + - `LineItemSize` — full garment size set (XS–6XL, youth, toddler, infant, OS, NONE) + - `LineItemStatus` — ACTIVE, CANCELLED + - `MerchOrderDeliveryMethod` — LOCAL_DELIVERY, PICKUP, SHIP + - `MerchOrderStatus` — CANCELLED, COMPLETE, PENDING, PROCESSING + - `MerchStoreStatus` — ACTIVE, ARCHIVED, CLOSED + - `MessageDeliveryStatus` — BOUNCED, DELIVERED, FAILED, PENDING, SENT + - `OrderPaymentStatus` — PAID, PARTIAL, UNPAID + - `OrderSortField` — CREATED_AT, CUSTOMER_DUE_AT, DUE_AT, UPDATED_AT, VISUAL_ID + - `PaymentDisputeStatusField` — LOST, NEEDS_RESPONSE, RESOLVED, UNDER_REVIEW, WON + - `PaymentRequestStatus` — CANCELLED, PAID, SENT + - `PoGoodsStatus` — CANCELLED, PARTIAL, PENDING, RECEIVED + - `StatusType` — INVOICE, QUOTE + - `TaskSortField` — BODY, CREATED_AT, DUE_AT, UPDATED_AT + - `TaskableType` — INVOICE, QUOTE + - `TransactionCategory` — PAYMENT, REFUND + - `TransactionSource` — CARD, CASH, CHECK, MANUAL, ONLINE +- Each enum exposes an `ALL` frozen array of all values +- Shared RSpec example `'a Printavo enum'` validates structure across all 18 modules + +### Notes +- Enum values are the best-effort representation of the Printavo V2 schema at time of + release. Values that differ from the live schema should be reported as patch issues. + ## [0.15.0] - 2026-04-01 ### Added diff --git a/docs/TODO.md b/docs/TODO.md index f1a4eb2..a75e9f7 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -381,6 +381,27 @@ return values — they are exposed via model field accessors, not separate resou - [x] `retry_on_rate_limit: true/false` client option - [x] Thor-based `printavo` CLI (`customers`, `orders`, `orders find `) +### v0.16.0 — Enums ✅ + +- [x] `Printavo::Enums::ApprovalRequestStatus` +- [x] `Printavo::Enums::ContactSortField` +- [x] `Printavo::Enums::LineItemSize` +- [x] `Printavo::Enums::LineItemStatus` +- [x] `Printavo::Enums::MerchOrderDeliveryMethod` +- [x] `Printavo::Enums::MerchOrderStatus` +- [x] `Printavo::Enums::MerchStoreStatus` +- [x] `Printavo::Enums::MessageDeliveryStatus` +- [x] `Printavo::Enums::OrderPaymentStatus` +- [x] `Printavo::Enums::OrderSortField` +- [x] `Printavo::Enums::PaymentDisputeStatusField` +- [x] `Printavo::Enums::PaymentRequestStatus` +- [x] `Printavo::Enums::PoGoodsStatus` +- [x] `Printavo::Enums::StatusType` +- [x] `Printavo::Enums::TaskSortField` +- [x] `Printavo::Enums::TaskableType` +- [x] `Printavo::Enums::TransactionCategory` +- [x] `Printavo::Enums::TransactionSource` + ### v0.99.0 — API Freeze - [ ] Community feedback integration diff --git a/lib/printavo.rb b/lib/printavo.rb index b4f6f01..057cf88 100644 --- a/lib/printavo.rb +++ b/lib/printavo.rb @@ -8,6 +8,7 @@ require_relative 'printavo/version' require_relative 'printavo/config' require_relative 'printavo/connection' +require_relative 'printavo/enums' require_relative 'printavo/errors' require_relative 'printavo/graphql_client' require_relative 'printavo/page' diff --git a/lib/printavo/enums.rb b/lib/printavo/enums.rb new file mode 100644 index 0000000..bb0bbb4 --- /dev/null +++ b/lib/printavo/enums.rb @@ -0,0 +1,21 @@ +# lib/printavo/enums.rb +# frozen_string_literal: true + +require_relative 'enums/approval_request_status' +require_relative 'enums/contact_sort_field' +require_relative 'enums/line_item_size' +require_relative 'enums/line_item_status' +require_relative 'enums/merch_order_delivery_method' +require_relative 'enums/merch_order_status' +require_relative 'enums/merch_store_status' +require_relative 'enums/message_delivery_status' +require_relative 'enums/order_payment_status' +require_relative 'enums/order_sort_field' +require_relative 'enums/payment_dispute_status_field' +require_relative 'enums/payment_request_status' +require_relative 'enums/po_goods_status' +require_relative 'enums/status_type' +require_relative 'enums/task_sort_field' +require_relative 'enums/taskable_type' +require_relative 'enums/transaction_category' +require_relative 'enums/transaction_source' diff --git a/lib/printavo/enums/approval_request_status.rb b/lib/printavo/enums/approval_request_status.rb new file mode 100644 index 0000000..49d43ab --- /dev/null +++ b/lib/printavo/enums/approval_request_status.rb @@ -0,0 +1,17 @@ +# lib/printavo/enums/approval_request_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Possible values for the +ApprovalRequest+ status field. + module ApprovalRequestStatus + APPROVED = 'approved' + DECLINED = 'declined' + PENDING = 'pending' + REVOKED = 'revoked' + UNAPPROVED = 'unapproved' + + ALL = [APPROVED, DECLINED, PENDING, REVOKED, UNAPPROVED].freeze + end + end +end diff --git a/lib/printavo/enums/contact_sort_field.rb b/lib/printavo/enums/contact_sort_field.rb new file mode 100644 index 0000000..2433750 --- /dev/null +++ b/lib/printavo/enums/contact_sort_field.rb @@ -0,0 +1,16 @@ +# lib/printavo/enums/contact_sort_field.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Fields by which a contact list can be sorted. + module ContactSortField + CONTACT_EMAIL = 'CONTACT_EMAIL' + CONTACT_NAME = 'CONTACT_NAME' + CUSTOMER_NAME = 'CUSTOMER_NAME' + ORDER_COUNT = 'ORDER_COUNT' + + ALL = [CONTACT_EMAIL, CONTACT_NAME, CUSTOMER_NAME, ORDER_COUNT].freeze + end + end +end diff --git a/lib/printavo/enums/line_item_size.rb b/lib/printavo/enums/line_item_size.rb new file mode 100644 index 0000000..4684202 --- /dev/null +++ b/lib/printavo/enums/line_item_size.rb @@ -0,0 +1,48 @@ +# lib/printavo/enums/line_item_size.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Garment size values for line items. All values carry the +size_+ prefix + # as returned by the Printavo V2 GraphQL API. + module LineItemSize + # Adult + XS = 'size_xs' + S = 'size_s' + M = 'size_m' + L = 'size_l' + XL = 'size_xl' + TWO_XL = 'size_2xl' + THREE_XL = 'size_3xl' + FOUR_XL = 'size_4xl' + FIVE_XL = 'size_5xl' + SIX_XL = 'size_6xl' + # Youth + YOUTH_XS = 'size_yxs' + YOUTH_S = 'size_ys' + YOUTH_M = 'size_ym' + YOUTH_L = 'size_yl' + YOUTH_XL = 'size_yxl' + # Toddler + TODDLER_2T = 'size_2t' + TODDLER_3T = 'size_3t' + TODDLER_4T = 'size_4t' + TODDLER_5T = 'size_5t' + # Infant + INFANT_6M = 'size_6m' + INFANT_12M = 'size_12m' + INFANT_18M = 'size_18m' + INFANT_24M = 'size_24m' + # Other + OTHER = 'size_other' + + ALL = [ + XS, S, M, L, XL, TWO_XL, THREE_XL, FOUR_XL, FIVE_XL, SIX_XL, + YOUTH_XS, YOUTH_S, YOUTH_M, YOUTH_L, YOUTH_XL, + TODDLER_2T, TODDLER_3T, TODDLER_4T, TODDLER_5T, + INFANT_6M, INFANT_12M, INFANT_18M, INFANT_24M, + OTHER + ].freeze + end + end +end diff --git a/lib/printavo/enums/line_item_status.rb b/lib/printavo/enums/line_item_status.rb new file mode 100644 index 0000000..bcb9459 --- /dev/null +++ b/lib/printavo/enums/line_item_status.rb @@ -0,0 +1,19 @@ +# lib/printavo/enums/line_item_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Inventory / fulfillment status of a +LineItem+. + module LineItemStatus + ARRIVED = 'arrived' + ATTACHED_TO_PO = 'attached_to_po' + IN = 'in' + NEED_ORDERING = 'need_ordering' + ORDERED = 'ordered' + PARTIALLY_RECEIVED = 'partially_received' + RECEIVED = 'received' + + ALL = [ARRIVED, ATTACHED_TO_PO, IN, NEED_ORDERING, ORDERED, PARTIALLY_RECEIVED, RECEIVED].freeze + end + end +end diff --git a/lib/printavo/enums/merch_order_delivery_method.rb b/lib/printavo/enums/merch_order_delivery_method.rb new file mode 100644 index 0000000..0ce3208 --- /dev/null +++ b/lib/printavo/enums/merch_order_delivery_method.rb @@ -0,0 +1,14 @@ +# lib/printavo/enums/merch_order_delivery_method.rb +# frozen_string_literal: true + +module Printavo + module Enums + # How a merch order will be fulfilled and delivered to the buyer. + module MerchOrderDeliveryMethod + DELIVERY = 'DELIVERY' + PICKUP = 'PICKUP' + + ALL = [DELIVERY, PICKUP].freeze + end + end +end diff --git a/lib/printavo/enums/merch_order_status.rb b/lib/printavo/enums/merch_order_status.rb new file mode 100644 index 0000000..fc5a505 --- /dev/null +++ b/lib/printavo/enums/merch_order_status.rb @@ -0,0 +1,14 @@ +# lib/printavo/enums/merch_order_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Fulfillment status of a +MerchOrder+. + module MerchOrderStatus + FULFILLED = 'FULFILLED' + UNFULFILLED = 'UNFULFILLED' + + ALL = [FULFILLED, UNFULFILLED].freeze + end + end +end diff --git a/lib/printavo/enums/merch_store_status.rb b/lib/printavo/enums/merch_store_status.rb new file mode 100644 index 0000000..99b1b09 --- /dev/null +++ b/lib/printavo/enums/merch_store_status.rb @@ -0,0 +1,14 @@ +# lib/printavo/enums/merch_store_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Publication status of a +MerchStore+. + module MerchStoreStatus + CLOSED = 'CLOSED' + LIVE = 'LIVE' + + ALL = [CLOSED, LIVE].freeze + end + end +end diff --git a/lib/printavo/enums/message_delivery_status.rb b/lib/printavo/enums/message_delivery_status.rb new file mode 100644 index 0000000..1f13199 --- /dev/null +++ b/lib/printavo/enums/message_delivery_status.rb @@ -0,0 +1,23 @@ +# lib/printavo/enums/message_delivery_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Delivery status for an email or text message sent via a +Thread+. + module MessageDeliveryStatus + BOUNCED = 'BOUNCED' + CLICKED = 'CLICKED' + DELIVERED = 'DELIVERED' + ERROR = 'ERROR' + LINKED = 'LINKED' + OPENED = 'OPENED' + OTHER = 'OTHER' + PAY_FOR = 'PAY_FOR' + PENDING = 'PENDING' + REJECTED = 'REJECTED' + SENT = 'SENT' + + ALL = [BOUNCED, CLICKED, DELIVERED, ERROR, LINKED, OPENED, OTHER, PAY_FOR, PENDING, REJECTED, SENT].freeze + end + end +end diff --git a/lib/printavo/enums/order_payment_status.rb b/lib/printavo/enums/order_payment_status.rb new file mode 100644 index 0000000..b3fcd12 --- /dev/null +++ b/lib/printavo/enums/order_payment_status.rb @@ -0,0 +1,15 @@ +# lib/printavo/enums/order_payment_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Payment collection status on an order or invoice. + module OrderPaymentStatus + PAID = 'PAID' + PARTIAL_PAYMENT = 'PARTIAL_PAYMENT' + UNPAID = 'UNPAID' + + ALL = [PAID, PARTIAL_PAYMENT, UNPAID].freeze + end + end +end diff --git a/lib/printavo/enums/order_sort_field.rb b/lib/printavo/enums/order_sort_field.rb new file mode 100644 index 0000000..16f20fe --- /dev/null +++ b/lib/printavo/enums/order_sort_field.rb @@ -0,0 +1,18 @@ +# lib/printavo/enums/order_sort_field.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Fields by which an order or invoice list can be sorted. + module OrderSortField + CUSTOMER_DUE_AT = 'CUSTOMER_DUE_AT' + CUSTOMER_NAME = 'CUSTOMER_NAME' + OWNER = 'OWNER' + STATUS = 'STATUS' + TOTAL = 'TOTAL' + VISUAL_ID = 'VISUAL_ID' + + ALL = [CUSTOMER_DUE_AT, CUSTOMER_NAME, OWNER, STATUS, TOTAL, VISUAL_ID].freeze + end + end +end diff --git a/lib/printavo/enums/payment_dispute_status_field.rb b/lib/printavo/enums/payment_dispute_status_field.rb new file mode 100644 index 0000000..733fef4 --- /dev/null +++ b/lib/printavo/enums/payment_dispute_status_field.rb @@ -0,0 +1,17 @@ +# lib/printavo/enums/payment_dispute_status_field.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Status of a payment dispute (chargeback). + module PaymentDisputeStatusField + DISPUTE_INITIATED = 'DISPUTE_INITIATED' + DISPUTE_IN_REVIEW = 'DISPUTE_IN_REVIEW' + DISPUTE_LOST = 'DISPUTE_LOST' + DISPUTE_WON = 'DISPUTE_WON' + RETRIEVAL_REQUEST = 'RETRIEVAL_REQUEST' + + ALL = [DISPUTE_INITIATED, DISPUTE_IN_REVIEW, DISPUTE_LOST, DISPUTE_WON, RETRIEVAL_REQUEST].freeze + end + end +end diff --git a/lib/printavo/enums/payment_request_status.rb b/lib/printavo/enums/payment_request_status.rb new file mode 100644 index 0000000..0faf3f7 --- /dev/null +++ b/lib/printavo/enums/payment_request_status.rb @@ -0,0 +1,15 @@ +# lib/printavo/enums/payment_request_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Lifecycle status of a +PaymentRequest+. + module PaymentRequestStatus + ARCHIVED = 'ARCHIVED' + CLOSED = 'CLOSED' + OPEN = 'OPEN' + + ALL = [ARCHIVED, CLOSED, OPEN].freeze + end + end +end diff --git a/lib/printavo/enums/po_goods_status.rb b/lib/printavo/enums/po_goods_status.rb new file mode 100644 index 0000000..63f5d01 --- /dev/null +++ b/lib/printavo/enums/po_goods_status.rb @@ -0,0 +1,17 @@ +# lib/printavo/enums/po_goods_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Receipt status of goods on a purchase order. + module PoGoodsStatus + ARRIVED = 'arrived' + NOT_ORDERED = 'not_ordered' + ORDERED = 'ordered' + PARTIALLY_RECEIVED = 'partially_received' + RECEIVED = 'received' + + ALL = [ARRIVED, NOT_ORDERED, ORDERED, PARTIALLY_RECEIVED, RECEIVED].freeze + end + end +end diff --git a/lib/printavo/enums/status_type.rb b/lib/printavo/enums/status_type.rb new file mode 100644 index 0000000..8ccae9c --- /dev/null +++ b/lib/printavo/enums/status_type.rb @@ -0,0 +1,14 @@ +# lib/printavo/enums/status_type.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Which order type a +Status+ applies to. + module StatusType + INVOICE = 'INVOICE' + QUOTE = 'QUOTE' + + ALL = [INVOICE, QUOTE].freeze + end + end +end diff --git a/lib/printavo/enums/task_sort_field.rb b/lib/printavo/enums/task_sort_field.rb new file mode 100644 index 0000000..c72ac00 --- /dev/null +++ b/lib/printavo/enums/task_sort_field.rb @@ -0,0 +1,14 @@ +# lib/printavo/enums/task_sort_field.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Fields by which a task list can be sorted. + module TaskSortField + CREATED_AT = 'CREATED_AT' + DUE_AT = 'DUE_AT' + + ALL = [CREATED_AT, DUE_AT].freeze + end + end +end diff --git a/lib/printavo/enums/taskable_type.rb b/lib/printavo/enums/taskable_type.rb new file mode 100644 index 0000000..6050942 --- /dev/null +++ b/lib/printavo/enums/taskable_type.rb @@ -0,0 +1,15 @@ +# lib/printavo/enums/taskable_type.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Record types to which a +Task+ can be attached. + module TaskableType + CUSTOMER = 'CUSTOMER' + INVOICE = 'INVOICE' + QUOTE = 'QUOTE' + + ALL = [CUSTOMER, INVOICE, QUOTE].freeze + end + end +end diff --git a/lib/printavo/enums/transaction_category.rb b/lib/printavo/enums/transaction_category.rb new file mode 100644 index 0000000..c3ea769 --- /dev/null +++ b/lib/printavo/enums/transaction_category.rb @@ -0,0 +1,18 @@ +# lib/printavo/enums/transaction_category.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Payment method category for a +Transaction+. + module TransactionCategory + BANK_TRANSFER = 'BANK_TRANSFER' + CASH = 'CASH' + CHECK = 'CHECK' + CREDIT_CARD = 'CREDIT_CARD' + ECHECK = 'ECHECK' + OTHER = 'OTHER' + + ALL = [BANK_TRANSFER, CASH, CHECK, CREDIT_CARD, ECHECK, OTHER].freeze + end + end +end diff --git a/lib/printavo/enums/transaction_source.rb b/lib/printavo/enums/transaction_source.rb new file mode 100644 index 0000000..abe6603 --- /dev/null +++ b/lib/printavo/enums/transaction_source.rb @@ -0,0 +1,14 @@ +# lib/printavo/enums/transaction_source.rb +# frozen_string_literal: true + +module Printavo + module Enums + # How a +Transaction+ was initiated or processed. + module TransactionSource + MANUAL = 'MANUAL' + PROCESSOR = 'PROCESSOR' + + ALL = [MANUAL, PROCESSOR].freeze + end + end +end diff --git a/lib/printavo/version.rb b/lib/printavo/version.rb index e45a1e9..7ae425a 100644 --- a/lib/printavo/version.rb +++ b/lib/printavo/version.rb @@ -2,5 +2,5 @@ # frozen_string_literal: true module Printavo - VERSION = '0.15.0' + VERSION = '0.16.0' end diff --git a/spec/printavo/enums_spec.rb b/spec/printavo/enums_spec.rb new file mode 100644 index 0000000..ffc121e --- /dev/null +++ b/spec/printavo/enums_spec.rb @@ -0,0 +1,211 @@ +# spec/printavo/enums_spec.rb +# frozen_string_literal: true + +require 'spec_helper' + +# Shared behaviour: every enum module must have a frozen ALL array that +# contains exactly the values of its own public constants (minus ALL itself). +RSpec.shared_examples 'a Printavo enum' do + it 'defines ALL as a frozen Array' do + expect(described_class::ALL).to be_a(Array) + expect(described_class::ALL).to be_frozen + end + + it 'ALL contains every constant value' do + expected = described_class.constants(false) + .reject { |c| c == :ALL } + .map { |c| described_class.const_get(c) } + .sort + expect(described_class::ALL.sort).to eq(expected) + end + + it 'every constant value is a frozen String' do + expect(described_class::ALL).to all(be_a(String).and(be_frozen)) + end +end + +RSpec.describe Printavo::Enums do + describe Printavo::Enums::ApprovalRequestStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::APPROVED).to eq('approved') } + it { expect(described_class::DECLINED).to eq('declined') } + it { expect(described_class::PENDING).to eq('pending') } + it { expect(described_class::REVOKED).to eq('revoked') } + it { expect(described_class::UNAPPROVED).to eq('unapproved') } + end + + describe Printavo::Enums::ContactSortField do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::CONTACT_EMAIL).to eq('CONTACT_EMAIL') } + it { expect(described_class::CONTACT_NAME).to eq('CONTACT_NAME') } + it { expect(described_class::CUSTOMER_NAME).to eq('CUSTOMER_NAME') } + it { expect(described_class::ORDER_COUNT).to eq('ORDER_COUNT') } + end + + describe Printavo::Enums::LineItemSize do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::XS).to eq('size_xs') } + it { expect(described_class::S).to eq('size_s') } + it { expect(described_class::M).to eq('size_m') } + it { expect(described_class::L).to eq('size_l') } + it { expect(described_class::XL).to eq('size_xl') } + it { expect(described_class::TWO_XL).to eq('size_2xl') } + it { expect(described_class::THREE_XL).to eq('size_3xl') } + it { expect(described_class::FOUR_XL).to eq('size_4xl') } + it { expect(described_class::FIVE_XL).to eq('size_5xl') } + it { expect(described_class::SIX_XL).to eq('size_6xl') } + it { expect(described_class::YOUTH_XS).to eq('size_yxs') } + it { expect(described_class::YOUTH_S).to eq('size_ys') } + it { expect(described_class::YOUTH_M).to eq('size_ym') } + it { expect(described_class::YOUTH_L).to eq('size_yl') } + it { expect(described_class::YOUTH_XL).to eq('size_yxl') } + it { expect(described_class::TODDLER_2T).to eq('size_2t') } + it { expect(described_class::TODDLER_3T).to eq('size_3t') } + it { expect(described_class::TODDLER_4T).to eq('size_4t') } + it { expect(described_class::TODDLER_5T).to eq('size_5t') } + it { expect(described_class::INFANT_6M).to eq('size_6m') } + it { expect(described_class::INFANT_12M).to eq('size_12m') } + it { expect(described_class::INFANT_18M).to eq('size_18m') } + it { expect(described_class::INFANT_24M).to eq('size_24m') } + it { expect(described_class::OTHER).to eq('size_other') } + end + + describe Printavo::Enums::LineItemStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::ARRIVED).to eq('arrived') } + it { expect(described_class::ATTACHED_TO_PO).to eq('attached_to_po') } + it { expect(described_class::IN).to eq('in') } + it { expect(described_class::NEED_ORDERING).to eq('need_ordering') } + it { expect(described_class::ORDERED).to eq('ordered') } + it { expect(described_class::PARTIALLY_RECEIVED).to eq('partially_received') } + it { expect(described_class::RECEIVED).to eq('received') } + end + + describe Printavo::Enums::MerchOrderDeliveryMethod do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::DELIVERY).to eq('DELIVERY') } + it { expect(described_class::PICKUP).to eq('PICKUP') } + end + + describe Printavo::Enums::MerchOrderStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::FULFILLED).to eq('FULFILLED') } + it { expect(described_class::UNFULFILLED).to eq('UNFULFILLED') } + end + + describe Printavo::Enums::MerchStoreStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::CLOSED).to eq('CLOSED') } + it { expect(described_class::LIVE).to eq('LIVE') } + end + + describe Printavo::Enums::MessageDeliveryStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::BOUNCED).to eq('BOUNCED') } + it { expect(described_class::CLICKED).to eq('CLICKED') } + it { expect(described_class::DELIVERED).to eq('DELIVERED') } + it { expect(described_class::ERROR).to eq('ERROR') } + it { expect(described_class::LINKED).to eq('LINKED') } + it { expect(described_class::OPENED).to eq('OPENED') } + it { expect(described_class::OTHER).to eq('OTHER') } + it { expect(described_class::PAY_FOR).to eq('PAY_FOR') } + it { expect(described_class::PENDING).to eq('PENDING') } + it { expect(described_class::REJECTED).to eq('REJECTED') } + it { expect(described_class::SENT).to eq('SENT') } + end + + describe Printavo::Enums::OrderPaymentStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::PAID).to eq('PAID') } + it { expect(described_class::PARTIAL_PAYMENT).to eq('PARTIAL_PAYMENT') } + it { expect(described_class::UNPAID).to eq('UNPAID') } + end + + describe Printavo::Enums::OrderSortField do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::CUSTOMER_DUE_AT).to eq('CUSTOMER_DUE_AT') } + it { expect(described_class::CUSTOMER_NAME).to eq('CUSTOMER_NAME') } + it { expect(described_class::OWNER).to eq('OWNER') } + it { expect(described_class::STATUS).to eq('STATUS') } + it { expect(described_class::TOTAL).to eq('TOTAL') } + it { expect(described_class::VISUAL_ID).to eq('VISUAL_ID') } + end + + describe Printavo::Enums::PaymentDisputeStatusField do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::DISPUTE_INITIATED).to eq('DISPUTE_INITIATED') } + it { expect(described_class::DISPUTE_IN_REVIEW).to eq('DISPUTE_IN_REVIEW') } + it { expect(described_class::DISPUTE_LOST).to eq('DISPUTE_LOST') } + it { expect(described_class::DISPUTE_WON).to eq('DISPUTE_WON') } + it { expect(described_class::RETRIEVAL_REQUEST).to eq('RETRIEVAL_REQUEST') } + end + + describe Printavo::Enums::PaymentRequestStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::ARCHIVED).to eq('ARCHIVED') } + it { expect(described_class::CLOSED).to eq('CLOSED') } + it { expect(described_class::OPEN).to eq('OPEN') } + end + + describe Printavo::Enums::PoGoodsStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::ARRIVED).to eq('arrived') } + it { expect(described_class::NOT_ORDERED).to eq('not_ordered') } + it { expect(described_class::ORDERED).to eq('ordered') } + it { expect(described_class::PARTIALLY_RECEIVED).to eq('partially_received') } + it { expect(described_class::RECEIVED).to eq('received') } + end + + describe Printavo::Enums::StatusType do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::INVOICE).to eq('INVOICE') } + it { expect(described_class::QUOTE).to eq('QUOTE') } + end + + describe Printavo::Enums::TaskSortField do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::CREATED_AT).to eq('CREATED_AT') } + it { expect(described_class::DUE_AT).to eq('DUE_AT') } + end + + describe Printavo::Enums::TaskableType do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::CUSTOMER).to eq('CUSTOMER') } + it { expect(described_class::INVOICE).to eq('INVOICE') } + it { expect(described_class::QUOTE).to eq('QUOTE') } + end + + describe Printavo::Enums::TransactionCategory do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::BANK_TRANSFER).to eq('BANK_TRANSFER') } + it { expect(described_class::CASH).to eq('CASH') } + it { expect(described_class::CHECK).to eq('CHECK') } + it { expect(described_class::CREDIT_CARD).to eq('CREDIT_CARD') } + it { expect(described_class::ECHECK).to eq('ECHECK') } + it { expect(described_class::OTHER).to eq('OTHER') } + end + + describe Printavo::Enums::TransactionSource do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::MANUAL).to eq('MANUAL') } + it { expect(described_class::PROCESSOR).to eq('PROCESSOR') } + end +end diff --git a/spec/printavo/resources/approval_requests_spec.rb b/spec/printavo/resources/approval_requests_spec.rb index 0cc3990..c4e3056 100644 --- a/spec/printavo/resources/approval_requests_spec.rb +++ b/spec/printavo/resources/approval_requests_spec.rb @@ -51,7 +51,7 @@ end describe '#approve' do - let(:ar_data) { fake_approval_request_attrs('id' => '10', 'status' => 'approved') } + let(:ar_data) { fake_approval_request_attrs('id' => '10', 'status' => Printavo::Enums::ApprovalRequestStatus::APPROVED) } before do allow(graphql).to receive(:mutate) @@ -60,11 +60,11 @@ end it { expect(resource.approve('10')).to be_a(Printavo::ApprovalRequest) } - it { expect(resource.approve('10').status).to eq('approved') } + it { expect(resource.approve('10').status).to eq(Printavo::Enums::ApprovalRequestStatus::APPROVED) } end describe '#revoke' do - let(:ar_data) { fake_approval_request_attrs('id' => '10', 'status' => 'revoked') } + let(:ar_data) { fake_approval_request_attrs('id' => '10', 'status' => Printavo::Enums::ApprovalRequestStatus::REVOKED) } before do allow(graphql).to receive(:mutate) @@ -73,11 +73,11 @@ end it { expect(resource.revoke('10')).to be_a(Printavo::ApprovalRequest) } - it { expect(resource.revoke('10').status).to eq('revoked') } + it { expect(resource.revoke('10').status).to eq(Printavo::Enums::ApprovalRequestStatus::REVOKED) } end describe '#unapprove' do - let(:ar_data) { fake_approval_request_attrs('id' => '10', 'status' => 'pending') } + let(:ar_data) { fake_approval_request_attrs('id' => '10', 'status' => Printavo::Enums::ApprovalRequestStatus::PENDING) } before do allow(graphql).to receive(:mutate) @@ -86,6 +86,6 @@ end it { expect(resource.unapprove('10')).to be_a(Printavo::ApprovalRequest) } - it { expect(resource.unapprove('10').status).to eq('pending') } + it { expect(resource.unapprove('10').status).to eq(Printavo::Enums::ApprovalRequestStatus::PENDING) } end end diff --git a/spec/support/factories/approval_request.rb b/spec/support/factories/approval_request.rb index c2a4eb4..cdbb7e6 100644 --- a/spec/support/factories/approval_request.rb +++ b/spec/support/factories/approval_request.rb @@ -7,7 +7,7 @@ module Factories def fake_approval_request_attrs(overrides = {}) { 'id' => Faker::Number.number(digits: 6).to_s, - 'status' => %w[pending approved revoked].sample, + 'status' => Printavo::Enums::ApprovalRequestStatus::ALL.sample, 'sentAt' => Faker::Time.backward(days: 7).iso8601, 'expiresAt' => Faker::Time.forward(days: 7).iso8601, 'contact' => fake_contact_attrs diff --git a/spec/support/factories/merch.rb b/spec/support/factories/merch.rb index f776515..c29b0ea 100644 --- a/spec/support/factories/merch.rb +++ b/spec/support/factories/merch.rb @@ -17,9 +17,10 @@ def fake_merch_store_attrs(overrides = {}) def fake_merch_order_attrs(overrides = {}) { 'id' => Faker::Number.number(digits: 6).to_s, - 'status' => %w[pending processing shipped].sample, + 'status' => Printavo::Enums::MerchOrderStatus::ALL.sample, 'contact' => fake_contact_attrs, - 'delivery' => { 'method' => 'ship', 'trackingNumber' => nil, 'shippedAt' => nil } + 'delivery' => { 'method' => Printavo::Enums::MerchOrderDeliveryMethod::DELIVERY, + 'trackingNumber' => nil, 'shippedAt' => nil } }.merge(overrides.transform_keys(&:to_s)) end end