Bulk edit offered two HAMLOG fields, both dates, and the first question they drew was the right one: which of these is the status? Collapsing the flag into the date was neat in the storage and a riddle in the dialog, where the eight fields above it are four status/date pairs. So four keys now — APP_OPSLOG_HAMLOG_SENT / _SENT_DATE and _QSL / _QSL_DATE — and four fields, in the shape an operator already reads for eQSL, QRZ, Club Log and HRDLog. The stamp written after a successful upload follows: Y in the status, the day in the date. Nothing else changes: the QSL Manager's backlog still asks whether the sent key is present, and the award engine still treats any non-N value in the QSL key as a confirmation.
51 lines
2.0 KiB
Go
51 lines
2.0 KiB
Go
package qso
|
|
|
|
import "testing"
|
|
|
|
// Mode, submode and RST are repair fields: an import that mapped every contact
|
|
// to SSB, or an ADIF that carried no MODE, is fixed in one pass instead of one
|
|
// row at a time. They were excluded as "per-QSO", which confused describing a
|
|
// QSO with repairing a batch of them.
|
|
func TestModeAndRSTAreBulkEditable(t *testing.T) {
|
|
for _, col := range []string{"mode", "submode", "rst_sent", "rst_rcvd"} {
|
|
if !bulkEditableCols[col] {
|
|
t.Errorf("%s should be bulk-editable", col)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Band must NOT be bulk-editable on its own: it travels with the frequency
|
|
// through BulkSetFrequency. A band contradicting its own frequency is invalid
|
|
// ADIF, and every export would carry the contradiction out into the world.
|
|
func TestBandIsNotBulkEditableAlone(t *testing.T) {
|
|
for _, col := range []string{"band", "freq_hz", "callsign", "qso_date"} {
|
|
if bulkEditableCols[col] {
|
|
t.Errorf("%s must not be bulk-editable on its own", col)
|
|
}
|
|
}
|
|
}
|
|
|
|
// A log uploaded to HAMLOG.online BY HAND has to be markable afterwards, or
|
|
// OpsLog offers to send every one of those contacts again. Both directions live
|
|
// in extras — the ADIF names a field for hamlog.EU and none for hamlog.ONLINE —
|
|
// so they must be reachable through the extras path, not the column one.
|
|
func TestHamlogFieldsAreBulkEditable(t *testing.T) {
|
|
for field, want := range map[string]string{
|
|
"hamlog_sent": "APP_OPSLOG_HAMLOG_SENT",
|
|
"hamlog_sent_date": "APP_OPSLOG_HAMLOG_SENT_DATE",
|
|
"hamlog_rcvd": "APP_OPSLOG_HAMLOG_QSL",
|
|
"hamlog_rcvd_date": "APP_OPSLOG_HAMLOG_QSL_DATE",
|
|
} {
|
|
if got := BulkExtraKey(field); got != want {
|
|
t.Errorf("BulkExtraKey(%q) = %q, want %q", field, got, want)
|
|
}
|
|
}
|
|
// And they are NOT columns: a mapping that also claimed a column would write
|
|
// to a table that has none.
|
|
for _, col := range []string{"hamlog_sent", "hamlog_rcvd", "APP_OPSLOG_HAMLOG_SENT"} {
|
|
if BulkEditable(col) {
|
|
t.Errorf("%q is offered as a bulk-editable COLUMN", col)
|
|
}
|
|
}
|
|
}
|