Skip to content

Release 1.9.0: implement the remaining test placeholders and fix what they hid - #64

Merged
ademar merged 1 commit into
masterfrom
feature/placeholders-1.9
Sep 25, 2026
Merged

ademar merged 1 commit into
masterfrom
feature/placeholders-1.9

Conversation

@ademar

@ademar ademar commented Sep 25, 2026

Copy link
Copy Markdown
Member

Summary

All 19 Assert.Inconclusive("Not implemented") tests now run against their RFC 5730–5733 fixtures, so none are skipped. 12 only needed writing: host delete, domain info/create/update/delete commands, and seven responses. The other 7 exposed real gaps:

  • Contact update crashed when adding or removing a status. It threw NullReferenceException because contact:add/contact:rem was never created. Other fixes:
    • New ContactChange.AuthInfo changes the contact's password.
    • Password used to be emitted after contact:chg, outside it, which the contact-1.0 schema doesn't allow. It now goes inside chg.
    • email is now written before disclose, in RFC 5733 order.
    • The two Nominet privacy fixtures had been edited to match the old output ("disclose moved before authinfo"). They're restored to Nominet's documented form, and the stale notes are removed.
  • Domain transfer could only send a bare request. New Operation (TransferOperation.Request, the default, plus Query, Approve, Reject and Cancel), Period, and AuthInfoRoid for the pw roid attribute. Existing callers produce the same XML. CiraDomainTransfer is unaffected.
  • Contact transfer didn't exist. New ContactTransfer command and ContactTransferResponse, which exposes TransferStatus, RequestClientId, RequestDate, ActionClientId and ActionDate, the same names DomainTransferResult uses.
  • The host create result couldn't be read. HostCreateResponse.HostCreateResult was protected; it's now public.

New command tests compare XML structurally, ignoring formatting, namespace declarations and attribute order. The RFC fixtures don't all use the same formatting.

Version bumped to 1.9.0. All changes add API except two behavior fixes. Contact status updates now work instead of throwing. ContactUpdate with Password now places authInfo where the schema requires it.

Testing

  • 97 passed, 0 skipped (previously 77 passed, 19 skipped), in UTC and Asia/Tokyo.
  • The 10 command fixtures (domain, host and contact, including both transfer operations) were also compared against the library output in a separate harness.

🤖 Generated with Claude Code

All 19 Inconclusive("Not implemented") tests now run against their RFC
fixtures. 12 only needed writing. The rest exposed:

- ContactUpdate threw NullReferenceException when adding or removing a
  status: contact:add/contact:rem was never created. It could not
  change authInfo (new ContactChange.AuthInfo); Password was emitted
  after chg, outside it, which contact-1.0 does not allow. It now goes
  inside chg, and email is written before disclose as RFC 5733 orders.
  The two Nominet privacy fixtures had been edited to match the old
  output; they are back to Nominet's documented form.
- DomainTransfer always sent op="request". New Operation (request,
  query, approve, reject, cancel), Period, and AuthInfoRoid for the pw
  roid attribute.
- Contact transfer did not exist: new ContactTransfer command and
  ContactTransferResponse, sharing the TransferOperation enum.
- HostCreateResponse.HostCreateResult was protected; now public.

Command tests compare XML structurally, so fixture formatting no longer
matters. Bump to 1.9.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ademar
ademar merged commit db762e2 into master Sep 25, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant