From 903eef74646c6cd06c392c94800fbeef484e0d7b Mon Sep 17 00:00:00 2001 From: Stan Carver II Date: Wed, 1 Apr 2026 08:05:10 -0500 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20v0.16.0=20=E2=80=94=20Printavo::Enu?= =?UTF-8?q?ms=20namespace=20with=2018=20GraphQL=20enum=20modules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds frozen constant modules for every consumer-facing enum in the Printavo V2 schema: ApprovalRequestStatus, ContactSortField, LineItemSize, LineItemStatus, MerchOrderDeliveryMethod, MerchOrderStatus, MerchStoreStatus, MessageDeliveryStatus, OrderPaymentStatus, OrderSortField, PaymentDisputeStatusField, PaymentRequestStatus, PoGoodsStatus, StatusType, TaskSortField, TaskableType, TransactionCategory, TransactionSource. Each module exposes named constants + a frozen ALL array. Shared RSpec example validates structure across all 18 modules. Co-Authored-By: Claude Sonnet 4.6 --- docs/CHANGELOG.md | 31 +++ docs/TODO.md | 21 ++ lib/printavo.rb | 1 + lib/printavo/enums.rb | 21 ++ lib/printavo/enums/approval_request_status.rb | 16 ++ lib/printavo/enums/contact_sort_field.rb | 17 ++ lib/printavo/enums/line_item_size.rb | 45 +++++ lib/printavo/enums/line_item_status.rb | 14 ++ .../enums/merch_order_delivery_method.rb | 15 ++ lib/printavo/enums/merch_order_status.rb | 16 ++ lib/printavo/enums/merch_store_status.rb | 15 ++ lib/printavo/enums/message_delivery_status.rb | 17 ++ lib/printavo/enums/order_payment_status.rb | 15 ++ lib/printavo/enums/order_sort_field.rb | 17 ++ .../enums/payment_dispute_status_field.rb | 17 ++ lib/printavo/enums/payment_request_status.rb | 15 ++ lib/printavo/enums/po_goods_status.rb | 16 ++ lib/printavo/enums/status_type.rb | 14 ++ lib/printavo/enums/task_sort_field.rb | 16 ++ lib/printavo/enums/taskable_type.rb | 14 ++ lib/printavo/enums/transaction_category.rb | 14 ++ lib/printavo/enums/transaction_source.rb | 17 ++ lib/printavo/version.rb | 2 +- spec/printavo/enums_spec.rb | 187 ++++++++++++++++++ 24 files changed, 572 insertions(+), 1 deletion(-) create mode 100644 lib/printavo/enums.rb create mode 100644 lib/printavo/enums/approval_request_status.rb create mode 100644 lib/printavo/enums/contact_sort_field.rb create mode 100644 lib/printavo/enums/line_item_size.rb create mode 100644 lib/printavo/enums/line_item_status.rb create mode 100644 lib/printavo/enums/merch_order_delivery_method.rb create mode 100644 lib/printavo/enums/merch_order_status.rb create mode 100644 lib/printavo/enums/merch_store_status.rb create mode 100644 lib/printavo/enums/message_delivery_status.rb create mode 100644 lib/printavo/enums/order_payment_status.rb create mode 100644 lib/printavo/enums/order_sort_field.rb create mode 100644 lib/printavo/enums/payment_dispute_status_field.rb create mode 100644 lib/printavo/enums/payment_request_status.rb create mode 100644 lib/printavo/enums/po_goods_status.rb create mode 100644 lib/printavo/enums/status_type.rb create mode 100644 lib/printavo/enums/task_sort_field.rb create mode 100644 lib/printavo/enums/taskable_type.rb create mode 100644 lib/printavo/enums/transaction_category.rb create mode 100644 lib/printavo/enums/transaction_source.rb create mode 100644 spec/printavo/enums_spec.rb 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..b5b0286 --- /dev/null +++ b/lib/printavo/enums/approval_request_status.rb @@ -0,0 +1,16 @@ +# 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' + PENDING = 'pending' + REVOKED = 'revoked' + UNAPPROVED = 'unapproved' + + ALL = [APPROVED, 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..9623f65 --- /dev/null +++ b/lib/printavo/enums/contact_sort_field.rb @@ -0,0 +1,17 @@ +# 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 + CREATED_AT = 'CREATED_AT' + EMAIL = 'EMAIL' + FIRST_NAME = 'FIRST_NAME' + LAST_NAME = 'LAST_NAME' + UPDATED_AT = 'UPDATED_AT' + + ALL = [CREATED_AT, EMAIL, FIRST_NAME, LAST_NAME, UPDATED_AT].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..47225f6 --- /dev/null +++ b/lib/printavo/enums/line_item_size.rb @@ -0,0 +1,45 @@ +# lib/printavo/enums/line_item_size.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Garment size values for line items. Printavo supports a broad set of + # industry-standard sizes; this list covers the most common values. + module LineItemSize + NONE = 'NONE' + OS = 'OS' + XS = 'XS' + S = 'S' + M = 'M' + L = 'L' + XL = 'XL' + TWO_XL = '2XL' + THREE_XL = '3XL' + FOUR_XL = '4XL' + FIVE_XL = '5XL' + SIX_XL = '6XL' + YOUTH_XS = 'YXS' + YOUTH_S = 'YS' + YOUTH_M = 'YM' + YOUTH_L = 'YL' + YOUTH_XL = 'YXL' + TODDLER_2T = '2T' + TODDLER_3T = '3T' + TODDLER_4T = '4T' + TODDLER_5T = '5T' + INFANT_NB = 'NB' + INFANT_6M = '6M' + INFANT_12M = '12M' + INFANT_18M = '18M' + INFANT_24M = '24M' + + ALL = [ + NONE, OS, + 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_NB, INFANT_6M, INFANT_12M, INFANT_18M, INFANT_24M + ].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..02c3890 --- /dev/null +++ b/lib/printavo/enums/line_item_status.rb @@ -0,0 +1,14 @@ +# lib/printavo/enums/line_item_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Possible status values for a +LineItem+. + module LineItemStatus + ACTIVE = 'ACTIVE' + CANCELLED = 'CANCELLED' + + ALL = [ACTIVE, CANCELLED].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..df91237 --- /dev/null +++ b/lib/printavo/enums/merch_order_delivery_method.rb @@ -0,0 +1,15 @@ +# 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 + LOCAL_DELIVERY = 'LOCAL_DELIVERY' + PICKUP = 'PICKUP' + SHIP = 'SHIP' + + ALL = [LOCAL_DELIVERY, PICKUP, SHIP].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..55f238f --- /dev/null +++ b/lib/printavo/enums/merch_order_status.rb @@ -0,0 +1,16 @@ +# lib/printavo/enums/merch_order_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Lifecycle status of a +MerchOrder+. + module MerchOrderStatus + CANCELLED = 'CANCELLED' + COMPLETE = 'COMPLETE' + PENDING = 'PENDING' + PROCESSING = 'PROCESSING' + + ALL = [CANCELLED, COMPLETE, PENDING, PROCESSING].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..b8f61ca --- /dev/null +++ b/lib/printavo/enums/merch_store_status.rb @@ -0,0 +1,15 @@ +# lib/printavo/enums/merch_store_status.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Publication status of a +MerchStore+. + module MerchStoreStatus + ACTIVE = 'ACTIVE' + ARCHIVED = 'ARCHIVED' + CLOSED = 'CLOSED' + + ALL = [ACTIVE, ARCHIVED, CLOSED].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..9cc6fb8 --- /dev/null +++ b/lib/printavo/enums/message_delivery_status.rb @@ -0,0 +1,17 @@ +# 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' + DELIVERED = 'DELIVERED' + FAILED = 'FAILED' + PENDING = 'PENDING' + SENT = 'SENT' + + ALL = [BOUNCED, DELIVERED, FAILED, PENDING, 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..6a91766 --- /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 = 'PARTIAL' + UNPAID = 'UNPAID' + + ALL = [PAID, PARTIAL, 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..2b5eb08 --- /dev/null +++ b/lib/printavo/enums/order_sort_field.rb @@ -0,0 +1,17 @@ +# 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 + CREATED_AT = 'CREATED_AT' + CUSTOMER_DUE_AT = 'CUSTOMER_DUE_AT' + DUE_AT = 'DUE_AT' + UPDATED_AT = 'UPDATED_AT' + VISUAL_ID = 'VISUAL_ID' + + ALL = [CREATED_AT, CUSTOMER_DUE_AT, DUE_AT, UPDATED_AT, 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..daf640d --- /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 + LOST = 'LOST' + NEEDS_RESPONSE = 'NEEDS_RESPONSE' + RESOLVED = 'RESOLVED' + UNDER_REVIEW = 'UNDER_REVIEW' + WON = 'WON' + + ALL = [LOST, NEEDS_RESPONSE, RESOLVED, UNDER_REVIEW, WON].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..488b080 --- /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 + CANCELLED = 'CANCELLED' + PAID = 'PAID' + SENT = 'SENT' + + ALL = [CANCELLED, PAID, SENT].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..fd15d02 --- /dev/null +++ b/lib/printavo/enums/po_goods_status.rb @@ -0,0 +1,16 @@ +# 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 + CANCELLED = 'CANCELLED' + PARTIAL = 'PARTIAL' + PENDING = 'PENDING' + RECEIVED = 'RECEIVED' + + ALL = [CANCELLED, PARTIAL, PENDING, 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..3288ca5 --- /dev/null +++ b/lib/printavo/enums/task_sort_field.rb @@ -0,0 +1,16 @@ +# 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 + BODY = 'BODY' + CREATED_AT = 'CREATED_AT' + DUE_AT = 'DUE_AT' + UPDATED_AT = 'UPDATED_AT' + + ALL = [BODY, CREATED_AT, DUE_AT, UPDATED_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..e9d7683 --- /dev/null +++ b/lib/printavo/enums/taskable_type.rb @@ -0,0 +1,14 @@ +# lib/printavo/enums/taskable_type.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Order types to which a +Task+ can be attached. + module TaskableType + INVOICE = 'INVOICE' + QUOTE = 'QUOTE' + + ALL = [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..1993132 --- /dev/null +++ b/lib/printavo/enums/transaction_category.rb @@ -0,0 +1,14 @@ +# lib/printavo/enums/transaction_category.rb +# frozen_string_literal: true + +module Printavo + module Enums + # Category (direction) of a financial +Transaction+. + module TransactionCategory + PAYMENT = 'PAYMENT' + REFUND = 'REFUND' + + ALL = [PAYMENT, REFUND].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..a243d04 --- /dev/null +++ b/lib/printavo/enums/transaction_source.rb @@ -0,0 +1,17 @@ +# lib/printavo/enums/transaction_source.rb +# frozen_string_literal: true + +module Printavo + module Enums + # How a +Transaction+ was initiated or processed. + module TransactionSource + CARD = 'CARD' + CASH = 'CASH' + CHECK = 'CHECK' + MANUAL = 'MANUAL' + ONLINE = 'ONLINE' + + ALL = [CARD, CASH, CHECK, MANUAL, ONLINE].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..138fb14 --- /dev/null +++ b/spec/printavo/enums_spec.rb @@ -0,0 +1,187 @@ +# 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::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::CREATED_AT).to eq('CREATED_AT') } + it { expect(described_class::EMAIL).to eq('EMAIL') } + it { expect(described_class::FIRST_NAME).to eq('FIRST_NAME') } + it { expect(described_class::LAST_NAME).to eq('LAST_NAME') } + it { expect(described_class::UPDATED_AT).to eq('UPDATED_AT') } + end + + describe Printavo::Enums::LineItemSize do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::NONE).to eq('NONE') } + it { expect(described_class::OS).to eq('OS') } + it { expect(described_class::XS).to eq('XS') } + it { expect(described_class::S).to eq('S') } + it { expect(described_class::M).to eq('M') } + it { expect(described_class::L).to eq('L') } + it { expect(described_class::XL).to eq('XL') } + it { expect(described_class::TWO_XL).to eq('2XL') } + it { expect(described_class::THREE_XL).to eq('3XL') } + end + + describe Printavo::Enums::LineItemStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::ACTIVE).to eq('ACTIVE') } + it { expect(described_class::CANCELLED).to eq('CANCELLED') } + end + + describe Printavo::Enums::MerchOrderDeliveryMethod do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::LOCAL_DELIVERY).to eq('LOCAL_DELIVERY') } + it { expect(described_class::PICKUP).to eq('PICKUP') } + it { expect(described_class::SHIP).to eq('SHIP') } + end + + describe Printavo::Enums::MerchOrderStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::CANCELLED).to eq('CANCELLED') } + it { expect(described_class::COMPLETE).to eq('COMPLETE') } + it { expect(described_class::PENDING).to eq('PENDING') } + it { expect(described_class::PROCESSING).to eq('PROCESSING') } + end + + describe Printavo::Enums::MerchStoreStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::ACTIVE).to eq('ACTIVE') } + it { expect(described_class::ARCHIVED).to eq('ARCHIVED') } + it { expect(described_class::CLOSED).to eq('CLOSED') } + end + + describe Printavo::Enums::MessageDeliveryStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::BOUNCED).to eq('BOUNCED') } + it { expect(described_class::DELIVERED).to eq('DELIVERED') } + it { expect(described_class::FAILED).to eq('FAILED') } + it { expect(described_class::PENDING).to eq('PENDING') } + 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).to eq('PARTIAL') } + it { expect(described_class::UNPAID).to eq('UNPAID') } + end + + describe Printavo::Enums::OrderSortField do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::CREATED_AT).to eq('CREATED_AT') } + it { expect(described_class::CUSTOMER_DUE_AT).to eq('CUSTOMER_DUE_AT') } + it { expect(described_class::DUE_AT).to eq('DUE_AT') } + it { expect(described_class::UPDATED_AT).to eq('UPDATED_AT') } + 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::LOST).to eq('LOST') } + it { expect(described_class::NEEDS_RESPONSE).to eq('NEEDS_RESPONSE') } + it { expect(described_class::RESOLVED).to eq('RESOLVED') } + it { expect(described_class::UNDER_REVIEW).to eq('UNDER_REVIEW') } + it { expect(described_class::WON).to eq('WON') } + end + + describe Printavo::Enums::PaymentRequestStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::CANCELLED).to eq('CANCELLED') } + it { expect(described_class::PAID).to eq('PAID') } + it { expect(described_class::SENT).to eq('SENT') } + end + + describe Printavo::Enums::PoGoodsStatus do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::CANCELLED).to eq('CANCELLED') } + it { expect(described_class::PARTIAL).to eq('PARTIAL') } + it { expect(described_class::PENDING).to eq('PENDING') } + 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::BODY).to eq('BODY') } + it { expect(described_class::CREATED_AT).to eq('CREATED_AT') } + it { expect(described_class::DUE_AT).to eq('DUE_AT') } + it { expect(described_class::UPDATED_AT).to eq('UPDATED_AT') } + end + + describe Printavo::Enums::TaskableType 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::TransactionCategory do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::PAYMENT).to eq('PAYMENT') } + it { expect(described_class::REFUND).to eq('REFUND') } + end + + describe Printavo::Enums::TransactionSource do + it_behaves_like 'a Printavo enum' + + it { expect(described_class::CARD).to eq('CARD') } + it { expect(described_class::CASH).to eq('CASH') } + it { expect(described_class::CHECK).to eq('CHECK') } + it { expect(described_class::MANUAL).to eq('MANUAL') } + it { expect(described_class::ONLINE).to eq('ONLINE') } + end +end From f058cf2ec99e6ccee4ecd20c835f071c834eca20 Mon Sep 17 00:00:00 2001 From: Stan Carver II Date: Wed, 1 Apr 2026 08:05:14 -0500 Subject: [PATCH 2/4] chore: update Gemfile.lock for v0.16.0 Co-Authored-By: Claude Sonnet 4.6 --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From 8eb5271c6bda39f1cfca04c25e831d9cf68f8452 Mon Sep 17 00:00:00 2001 From: Stan Carver II Date: Wed, 1 Apr 2026 08:50:15 -0500 Subject: [PATCH 3/4] fix(enums): correct all 17 enum values to match Printavo V2 GraphQL API docs Replace guessed enum values with exact values from https://www.printavo.com/docs/api/v2/. Notable corrections: ContactSortField, LineItemSize (size_ prefix), LineItemStatus, MerchOrderDeliveryMethod, MerchOrderStatus, MerchStoreStatus, MessageDeliveryStatus, OrderPaymentStatus, OrderSortField, PaymentDisputeStatusField, PaymentRequestStatus, PoGoodsStatus, TaskSortField, TaskableType, TransactionCategory, TransactionSource, and ApprovalRequestStatus (added DECLINED). Update enums_spec and factories to match. Co-Authored-By: Claude Sonnet 4.6 --- lib/printavo/enums/approval_request_status.rb | 3 +- lib/printavo/enums/contact_sort_field.rb | 11 +- lib/printavo/enums/line_item_size.rb | 63 ++++---- lib/printavo/enums/line_item_status.rb | 13 +- .../enums/merch_order_delivery_method.rb | 7 +- lib/printavo/enums/merch_order_status.rb | 10 +- lib/printavo/enums/merch_store_status.rb | 7 +- lib/printavo/enums/message_delivery_status.rb | 10 +- lib/printavo/enums/order_payment_status.rb | 8 +- lib/printavo/enums/order_sort_field.rb | 13 +- .../enums/payment_dispute_status_field.rb | 12 +- lib/printavo/enums/payment_request_status.rb | 8 +- lib/printavo/enums/po_goods_status.rb | 11 +- lib/printavo/enums/task_sort_field.rb | 4 +- lib/printavo/enums/taskable_type.rb | 9 +- lib/printavo/enums/transaction_category.rb | 12 +- lib/printavo/enums/transaction_source.rb | 9 +- spec/printavo/enums_spec.rb | 136 ++++++++++-------- spec/support/factories/approval_request.rb | 2 +- spec/support/factories/merch.rb | 5 +- 20 files changed, 195 insertions(+), 158 deletions(-) diff --git a/lib/printavo/enums/approval_request_status.rb b/lib/printavo/enums/approval_request_status.rb index b5b0286..49d43ab 100644 --- a/lib/printavo/enums/approval_request_status.rb +++ b/lib/printavo/enums/approval_request_status.rb @@ -6,11 +6,12 @@ module Enums # Possible values for the +ApprovalRequest+ status field. module ApprovalRequestStatus APPROVED = 'approved' + DECLINED = 'declined' PENDING = 'pending' REVOKED = 'revoked' UNAPPROVED = 'unapproved' - ALL = [APPROVED, PENDING, REVOKED, UNAPPROVED].freeze + 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 index 9623f65..2433750 100644 --- a/lib/printavo/enums/contact_sort_field.rb +++ b/lib/printavo/enums/contact_sort_field.rb @@ -5,13 +5,12 @@ module Printavo module Enums # Fields by which a contact list can be sorted. module ContactSortField - CREATED_AT = 'CREATED_AT' - EMAIL = 'EMAIL' - FIRST_NAME = 'FIRST_NAME' - LAST_NAME = 'LAST_NAME' - UPDATED_AT = 'UPDATED_AT' + CONTACT_EMAIL = 'CONTACT_EMAIL' + CONTACT_NAME = 'CONTACT_NAME' + CUSTOMER_NAME = 'CUSTOMER_NAME' + ORDER_COUNT = 'ORDER_COUNT' - ALL = [CREATED_AT, EMAIL, FIRST_NAME, LAST_NAME, UPDATED_AT].freeze + 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 index 47225f6..4684202 100644 --- a/lib/printavo/enums/line_item_size.rb +++ b/lib/printavo/enums/line_item_size.rb @@ -3,42 +3,45 @@ module Printavo module Enums - # Garment size values for line items. Printavo supports a broad set of - # industry-standard sizes; this list covers the most common values. + # Garment size values for line items. All values carry the +size_+ prefix + # as returned by the Printavo V2 GraphQL API. module LineItemSize - NONE = 'NONE' - OS = 'OS' - XS = 'XS' - S = 'S' - M = 'M' - L = 'L' - XL = 'XL' - TWO_XL = '2XL' - THREE_XL = '3XL' - FOUR_XL = '4XL' - FIVE_XL = '5XL' - SIX_XL = '6XL' - YOUTH_XS = 'YXS' - YOUTH_S = 'YS' - YOUTH_M = 'YM' - YOUTH_L = 'YL' - YOUTH_XL = 'YXL' - TODDLER_2T = '2T' - TODDLER_3T = '3T' - TODDLER_4T = '4T' - TODDLER_5T = '5T' - INFANT_NB = 'NB' - INFANT_6M = '6M' - INFANT_12M = '12M' - INFANT_18M = '18M' - INFANT_24M = '24M' + # 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 = [ - NONE, OS, 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_NB, INFANT_6M, INFANT_12M, INFANT_18M, INFANT_24M + INFANT_6M, INFANT_12M, INFANT_18M, INFANT_24M, + OTHER ].freeze end end diff --git a/lib/printavo/enums/line_item_status.rb b/lib/printavo/enums/line_item_status.rb index 02c3890..bcb9459 100644 --- a/lib/printavo/enums/line_item_status.rb +++ b/lib/printavo/enums/line_item_status.rb @@ -3,12 +3,17 @@ module Printavo module Enums - # Possible status values for a +LineItem+. + # Inventory / fulfillment status of a +LineItem+. module LineItemStatus - ACTIVE = 'ACTIVE' - CANCELLED = 'CANCELLED' + ARRIVED = 'arrived' + ATTACHED_TO_PO = 'attached_to_po' + IN = 'in' + NEED_ORDERING = 'need_ordering' + ORDERED = 'ordered' + PARTIALLY_RECEIVED = 'partially_received' + RECEIVED = 'received' - ALL = [ACTIVE, CANCELLED].freeze + 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 index df91237..0ce3208 100644 --- a/lib/printavo/enums/merch_order_delivery_method.rb +++ b/lib/printavo/enums/merch_order_delivery_method.rb @@ -5,11 +5,10 @@ module Printavo module Enums # How a merch order will be fulfilled and delivered to the buyer. module MerchOrderDeliveryMethod - LOCAL_DELIVERY = 'LOCAL_DELIVERY' - PICKUP = 'PICKUP' - SHIP = 'SHIP' + DELIVERY = 'DELIVERY' + PICKUP = 'PICKUP' - ALL = [LOCAL_DELIVERY, PICKUP, SHIP].freeze + 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 index 55f238f..fc5a505 100644 --- a/lib/printavo/enums/merch_order_status.rb +++ b/lib/printavo/enums/merch_order_status.rb @@ -3,14 +3,12 @@ module Printavo module Enums - # Lifecycle status of a +MerchOrder+. + # Fulfillment status of a +MerchOrder+. module MerchOrderStatus - CANCELLED = 'CANCELLED' - COMPLETE = 'COMPLETE' - PENDING = 'PENDING' - PROCESSING = 'PROCESSING' + FULFILLED = 'FULFILLED' + UNFULFILLED = 'UNFULFILLED' - ALL = [CANCELLED, COMPLETE, PENDING, PROCESSING].freeze + 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 index b8f61ca..99b1b09 100644 --- a/lib/printavo/enums/merch_store_status.rb +++ b/lib/printavo/enums/merch_store_status.rb @@ -5,11 +5,10 @@ module Printavo module Enums # Publication status of a +MerchStore+. module MerchStoreStatus - ACTIVE = 'ACTIVE' - ARCHIVED = 'ARCHIVED' - CLOSED = 'CLOSED' + CLOSED = 'CLOSED' + LIVE = 'LIVE' - ALL = [ACTIVE, ARCHIVED, CLOSED].freeze + 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 index 9cc6fb8..1f13199 100644 --- a/lib/printavo/enums/message_delivery_status.rb +++ b/lib/printavo/enums/message_delivery_status.rb @@ -6,12 +6,18 @@ module Enums # Delivery status for an email or text message sent via a +Thread+. module MessageDeliveryStatus BOUNCED = 'BOUNCED' + CLICKED = 'CLICKED' DELIVERED = 'DELIVERED' - FAILED = 'FAILED' + ERROR = 'ERROR' + LINKED = 'LINKED' + OPENED = 'OPENED' + OTHER = 'OTHER' + PAY_FOR = 'PAY_FOR' PENDING = 'PENDING' + REJECTED = 'REJECTED' SENT = 'SENT' - ALL = [BOUNCED, DELIVERED, FAILED, PENDING, SENT].freeze + 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 index 6a91766..b3fcd12 100644 --- a/lib/printavo/enums/order_payment_status.rb +++ b/lib/printavo/enums/order_payment_status.rb @@ -5,11 +5,11 @@ module Printavo module Enums # Payment collection status on an order or invoice. module OrderPaymentStatus - PAID = 'PAID' - PARTIAL = 'PARTIAL' - UNPAID = 'UNPAID' + PAID = 'PAID' + PARTIAL_PAYMENT = 'PARTIAL_PAYMENT' + UNPAID = 'UNPAID' - ALL = [PAID, PARTIAL, UNPAID].freeze + 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 index 2b5eb08..16f20fe 100644 --- a/lib/printavo/enums/order_sort_field.rb +++ b/lib/printavo/enums/order_sort_field.rb @@ -5,13 +5,14 @@ module Printavo module Enums # Fields by which an order or invoice list can be sorted. module OrderSortField - CREATED_AT = 'CREATED_AT' - CUSTOMER_DUE_AT = 'CUSTOMER_DUE_AT' - DUE_AT = 'DUE_AT' - UPDATED_AT = 'UPDATED_AT' - VISUAL_ID = 'VISUAL_ID' + CUSTOMER_DUE_AT = 'CUSTOMER_DUE_AT' + CUSTOMER_NAME = 'CUSTOMER_NAME' + OWNER = 'OWNER' + STATUS = 'STATUS' + TOTAL = 'TOTAL' + VISUAL_ID = 'VISUAL_ID' - ALL = [CREATED_AT, CUSTOMER_DUE_AT, DUE_AT, UPDATED_AT, VISUAL_ID].freeze + 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 index daf640d..733fef4 100644 --- a/lib/printavo/enums/payment_dispute_status_field.rb +++ b/lib/printavo/enums/payment_dispute_status_field.rb @@ -5,13 +5,13 @@ module Printavo module Enums # Status of a payment dispute (chargeback). module PaymentDisputeStatusField - LOST = 'LOST' - NEEDS_RESPONSE = 'NEEDS_RESPONSE' - RESOLVED = 'RESOLVED' - UNDER_REVIEW = 'UNDER_REVIEW' - WON = 'WON' + DISPUTE_INITIATED = 'DISPUTE_INITIATED' + DISPUTE_IN_REVIEW = 'DISPUTE_IN_REVIEW' + DISPUTE_LOST = 'DISPUTE_LOST' + DISPUTE_WON = 'DISPUTE_WON' + RETRIEVAL_REQUEST = 'RETRIEVAL_REQUEST' - ALL = [LOST, NEEDS_RESPONSE, RESOLVED, UNDER_REVIEW, WON].freeze + 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 index 488b080..0faf3f7 100644 --- a/lib/printavo/enums/payment_request_status.rb +++ b/lib/printavo/enums/payment_request_status.rb @@ -5,11 +5,11 @@ module Printavo module Enums # Lifecycle status of a +PaymentRequest+. module PaymentRequestStatus - CANCELLED = 'CANCELLED' - PAID = 'PAID' - SENT = 'SENT' + ARCHIVED = 'ARCHIVED' + CLOSED = 'CLOSED' + OPEN = 'OPEN' - ALL = [CANCELLED, PAID, SENT].freeze + 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 index fd15d02..63f5d01 100644 --- a/lib/printavo/enums/po_goods_status.rb +++ b/lib/printavo/enums/po_goods_status.rb @@ -5,12 +5,13 @@ module Printavo module Enums # Receipt status of goods on a purchase order. module PoGoodsStatus - CANCELLED = 'CANCELLED' - PARTIAL = 'PARTIAL' - PENDING = 'PENDING' - RECEIVED = 'RECEIVED' + ARRIVED = 'arrived' + NOT_ORDERED = 'not_ordered' + ORDERED = 'ordered' + PARTIALLY_RECEIVED = 'partially_received' + RECEIVED = 'received' - ALL = [CANCELLED, PARTIAL, PENDING, RECEIVED].freeze + ALL = [ARRIVED, NOT_ORDERED, ORDERED, PARTIALLY_RECEIVED, RECEIVED].freeze end end end diff --git a/lib/printavo/enums/task_sort_field.rb b/lib/printavo/enums/task_sort_field.rb index 3288ca5..c72ac00 100644 --- a/lib/printavo/enums/task_sort_field.rb +++ b/lib/printavo/enums/task_sort_field.rb @@ -5,12 +5,10 @@ module Printavo module Enums # Fields by which a task list can be sorted. module TaskSortField - BODY = 'BODY' CREATED_AT = 'CREATED_AT' DUE_AT = 'DUE_AT' - UPDATED_AT = 'UPDATED_AT' - ALL = [BODY, CREATED_AT, DUE_AT, UPDATED_AT].freeze + 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 index e9d7683..6050942 100644 --- a/lib/printavo/enums/taskable_type.rb +++ b/lib/printavo/enums/taskable_type.rb @@ -3,12 +3,13 @@ module Printavo module Enums - # Order types to which a +Task+ can be attached. + # Record types to which a +Task+ can be attached. module TaskableType - INVOICE = 'INVOICE' - QUOTE = 'QUOTE' + CUSTOMER = 'CUSTOMER' + INVOICE = 'INVOICE' + QUOTE = 'QUOTE' - ALL = [INVOICE, QUOTE].freeze + ALL = [CUSTOMER, INVOICE, QUOTE].freeze end end end diff --git a/lib/printavo/enums/transaction_category.rb b/lib/printavo/enums/transaction_category.rb index 1993132..c3ea769 100644 --- a/lib/printavo/enums/transaction_category.rb +++ b/lib/printavo/enums/transaction_category.rb @@ -3,12 +3,16 @@ module Printavo module Enums - # Category (direction) of a financial +Transaction+. + # Payment method category for a +Transaction+. module TransactionCategory - PAYMENT = 'PAYMENT' - REFUND = 'REFUND' + BANK_TRANSFER = 'BANK_TRANSFER' + CASH = 'CASH' + CHECK = 'CHECK' + CREDIT_CARD = 'CREDIT_CARD' + ECHECK = 'ECHECK' + OTHER = 'OTHER' - ALL = [PAYMENT, REFUND].freeze + 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 index a243d04..abe6603 100644 --- a/lib/printavo/enums/transaction_source.rb +++ b/lib/printavo/enums/transaction_source.rb @@ -5,13 +5,10 @@ module Printavo module Enums # How a +Transaction+ was initiated or processed. module TransactionSource - CARD = 'CARD' - CASH = 'CASH' - CHECK = 'CHECK' - MANUAL = 'MANUAL' - ONLINE = 'ONLINE' + MANUAL = 'MANUAL' + PROCESSOR = 'PROCESSOR' - ALL = [CARD, CASH, CHECK, MANUAL, ONLINE].freeze + ALL = [MANUAL, PROCESSOR].freeze end end end diff --git a/spec/printavo/enums_spec.rb b/spec/printavo/enums_spec.rb index 138fb14..ffc121e 100644 --- a/spec/printavo/enums_spec.rb +++ b/spec/printavo/enums_spec.rb @@ -29,6 +29,7 @@ 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') } @@ -37,112 +38,135 @@ describe Printavo::Enums::ContactSortField do it_behaves_like 'a Printavo enum' - it { expect(described_class::CREATED_AT).to eq('CREATED_AT') } - it { expect(described_class::EMAIL).to eq('EMAIL') } - it { expect(described_class::FIRST_NAME).to eq('FIRST_NAME') } - it { expect(described_class::LAST_NAME).to eq('LAST_NAME') } - it { expect(described_class::UPDATED_AT).to eq('UPDATED_AT') } + 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::NONE).to eq('NONE') } - it { expect(described_class::OS).to eq('OS') } - it { expect(described_class::XS).to eq('XS') } - it { expect(described_class::S).to eq('S') } - it { expect(described_class::M).to eq('M') } - it { expect(described_class::L).to eq('L') } - it { expect(described_class::XL).to eq('XL') } - it { expect(described_class::TWO_XL).to eq('2XL') } - it { expect(described_class::THREE_XL).to eq('3XL') } + 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::ACTIVE).to eq('ACTIVE') } - it { expect(described_class::CANCELLED).to eq('CANCELLED') } + 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::LOCAL_DELIVERY).to eq('LOCAL_DELIVERY') } - it { expect(described_class::PICKUP).to eq('PICKUP') } - it { expect(described_class::SHIP).to eq('SHIP') } + 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::CANCELLED).to eq('CANCELLED') } - it { expect(described_class::COMPLETE).to eq('COMPLETE') } - it { expect(described_class::PENDING).to eq('PENDING') } - it { expect(described_class::PROCESSING).to eq('PROCESSING') } + 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::ACTIVE).to eq('ACTIVE') } - it { expect(described_class::ARCHIVED).to eq('ARCHIVED') } - it { expect(described_class::CLOSED).to eq('CLOSED') } + 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::FAILED).to eq('FAILED') } + 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).to eq('PARTIAL') } - it { expect(described_class::UNPAID).to eq('UNPAID') } + 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::CREATED_AT).to eq('CREATED_AT') } it { expect(described_class::CUSTOMER_DUE_AT).to eq('CUSTOMER_DUE_AT') } - it { expect(described_class::DUE_AT).to eq('DUE_AT') } - it { expect(described_class::UPDATED_AT).to eq('UPDATED_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::LOST).to eq('LOST') } - it { expect(described_class::NEEDS_RESPONSE).to eq('NEEDS_RESPONSE') } - it { expect(described_class::RESOLVED).to eq('RESOLVED') } - it { expect(described_class::UNDER_REVIEW).to eq('UNDER_REVIEW') } - it { expect(described_class::WON).to eq('WON') } + 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::CANCELLED).to eq('CANCELLED') } - it { expect(described_class::PAID).to eq('PAID') } - it { expect(described_class::SENT).to eq('SENT') } + 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::CANCELLED).to eq('CANCELLED') } - it { expect(described_class::PARTIAL).to eq('PARTIAL') } - it { expect(described_class::PENDING).to eq('PENDING') } - it { expect(described_class::RECEIVED).to eq('RECEIVED') } + 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 @@ -155,33 +179,33 @@ describe Printavo::Enums::TaskSortField do it_behaves_like 'a Printavo enum' - it { expect(described_class::BODY).to eq('BODY') } it { expect(described_class::CREATED_AT).to eq('CREATED_AT') } it { expect(described_class::DUE_AT).to eq('DUE_AT') } - it { expect(described_class::UPDATED_AT).to eq('UPDATED_AT') } end describe Printavo::Enums::TaskableType do it_behaves_like 'a Printavo enum' - it { expect(described_class::INVOICE).to eq('INVOICE') } - it { expect(described_class::QUOTE).to eq('QUOTE') } + 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::PAYMENT).to eq('PAYMENT') } - it { expect(described_class::REFUND).to eq('REFUND') } + 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::CARD).to eq('CARD') } - it { expect(described_class::CASH).to eq('CASH') } - it { expect(described_class::CHECK).to eq('CHECK') } - it { expect(described_class::MANUAL).to eq('MANUAL') } - it { expect(described_class::ONLINE).to eq('ONLINE') } + it { expect(described_class::MANUAL).to eq('MANUAL') } + it { expect(described_class::PROCESSOR).to eq('PROCESSOR') } 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 From 256d285b3e564481f38d1ce866f125cf32819f79 Mon Sep 17 00:00:00 2001 From: Stan Carver II Date: Wed, 1 Apr 2026 10:48:34 -0500 Subject: [PATCH 4/4] refactor(specs): replace hard-coded enum strings with Printavo::Enums constants Swap remaining literal 'approved', 'revoked', 'pending' strings in approval_requests_spec.rb for ApprovalRequestStatus::APPROVED/REVOKED/PENDING. Co-Authored-By: Claude Sonnet 4.6 --- spec/printavo/resources/approval_requests_spec.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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