Browse Source

Chore: convert "unnamed" into constant

- "Unnamed/Unknown" simplified into just "Unnamed"
- Phrase variations have their own constants
pull/155/head
Jose Olarte III 2 days ago
parent
commit
eb44e7b51e
  1. 12
      src/components/EntityGrid.vue
  2. 3
      src/components/EntitySummaryButton.vue
  3. 7
      src/components/GiftedDialog.vue
  4. 10
      src/components/MembersList.vue
  5. 10
      src/components/ProjectCard.vue
  6. 3
      src/components/PushNotificationPermission.vue
  7. 17
      src/constants/entities.ts
  8. 5
      src/constants/notifications.ts
  9. 3
      src/libs/endorserServer.ts
  10. 3
      src/libs/util.ts
  11. 23
      src/views/ContactGiftingView.vue
  12. 3
      src/views/DIDView.vue
  13. 10
      src/views/DiscoverView.vue
  14. 10
      src/views/HelpView.vue
  15. 3
      src/views/HomeView.vue
  16. 12
      src/views/ProjectViewView.vue
  17. 10
      src/views/ProjectsView.vue
  18. 3
      test-playwright/00-noid-tests.spec.ts
  19. 3
      test-playwright/30-record-gift.spec.ts
  20. 3
      test-playwright/33-record-gift-x10.spec.ts

12
src/components/EntityGrid.vue

@ -22,7 +22,7 @@ projects, and special entities with selection. * * @author Matthew Raymer */
<!-- "Unnamed" entity --> <!-- "Unnamed" entity -->
<SpecialEntityCard <SpecialEntityCard
entity-type="unnamed" entity-type="unnamed"
label="Unnamed" :label="unnamedEntityName"
icon="circle-question" icon="circle-question"
:entity-data="unnamedEntityData" :entity-data="unnamedEntityData"
:notify="notify" :notify="notify"
@ -83,6 +83,7 @@ import ShowAllCard from "./ShowAllCard.vue";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { PlanData } from "../interfaces/records"; import { PlanData } from "../interfaces/records";
import { NotificationIface } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { UNNAMED_ENTITY_NAME } from "@/constants/entities";
/** /**
* EntityGrid - Unified grid layout for displaying people or projects * EntityGrid - Unified grid layout for displaying people or projects
@ -277,10 +278,17 @@ export default class EntityGrid extends Vue {
get unnamedEntityData(): { did: string; name: string } { get unnamedEntityData(): { did: string; name: string } {
return { return {
did: "", did: "",
name: "Unnamed", name: UNNAMED_ENTITY_NAME,
}; };
} }
/**
* Get the unnamed entity name constant
*/
get unnamedEntityName(): string {
return UNNAMED_ENTITY_NAME;
}
/** /**
* Check if a person DID is conflicted * Check if a person DID is conflicted
*/ */

3
src/components/EntitySummaryButton.vue

@ -62,6 +62,7 @@ import { Component, Prop, Vue } from "vue-facing-decorator";
import EntityIcon from "./EntityIcon.vue"; import EntityIcon from "./EntityIcon.vue";
import ProjectIcon from "./ProjectIcon.vue"; import ProjectIcon from "./ProjectIcon.vue";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { UNNAMED_ENTITY_NAME } from "@/constants/entities";
/** /**
* Entity interface for both person and project entities * Entity interface for both person and project entities
@ -163,7 +164,7 @@ export default class EntitySummaryButton extends Vue {
// If the entity is the special "Unnamed", use "Unnamed" // If the entity is the special "Unnamed", use "Unnamed"
if (this.entity?.did === "") { if (this.entity?.did === "") {
return "Unnamed"; return UNNAMED_ENTITY_NAME;
} }
// If the entity does not have a set name, but is not the special "Unnamed", use their DID // If the entity does not have a set name, but is not the special "Unnamed", use their DID

7
src/components/GiftedDialog.vue

@ -88,6 +88,7 @@ import {
NOTIFY_GIFTED_DETAILS_NO_IDENTIFIER, NOTIFY_GIFTED_DETAILS_NO_IDENTIFIER,
NOTIFY_GIFTED_DETAILS_RECORDING_GIVE, NOTIFY_GIFTED_DETAILS_RECORDING_GIVE,
} from "@/constants/notifications"; } from "@/constants/notifications";
import { UNNAMED_ENTITY_NAME } from "@/constants/entities";
@Component({ @Component({
components: { components: {
@ -457,7 +458,7 @@ export default class GiftedDialog extends Vue {
if (!this.giver || !this.giver.did) { if (!this.giver || !this.giver.did) {
this.giver = { this.giver = {
did: "", did: "",
name: "Unnamed", name: UNNAMED_ENTITY_NAME,
}; };
} }
} }
@ -519,7 +520,7 @@ export default class GiftedDialog extends Vue {
if (!this.receiver || !this.receiver.did) { if (!this.receiver || !this.receiver.did) {
this.receiver = { this.receiver = {
did: "", did: "",
name: "Unnamed", name: UNNAMED_ENTITY_NAME,
}; };
} }
} }
@ -596,7 +597,7 @@ export default class GiftedDialog extends Vue {
return { ...contact, name: "You" }; return { ...contact, name: "You" };
} else if (!contact.did || contact.did === "") { } else if (!contact.did || contact.did === "") {
// If DID is empty/null, create "Unnamed" entity // If DID is empty/null, create "Unnamed" entity
return { ...contact, name: "Unnamed" }; return { ...contact, name: UNNAMED_ENTITY_NAME };
} else { } else {
// Return the contact as-is // Return the contact as-is
return contact; return contact;

10
src/components/MembersList.vue

@ -81,7 +81,7 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
<h3 class="text-lg font-medium"> <h3 class="text-lg font-medium">
{{ member.name || "Unnamed Member" }} {{ member.name || unnamedMember }}
</h3> </h3>
<div <div
v-if="!getContactFor(member.did) && member.did !== activeDid" v-if="!getContactFor(member.did) && member.did !== activeDid"
@ -177,6 +177,7 @@ import {
NOTIFY_ADD_CONTACT_FIRST, NOTIFY_ADD_CONTACT_FIRST,
NOTIFY_CONTINUE_WITHOUT_ADDING, NOTIFY_CONTINUE_WITHOUT_ADDING,
} from "@/constants/notifications"; } from "@/constants/notifications";
import { UNNAMED_MEMBER } from "@/constants/entities";
interface Member { interface Member {
admitted: boolean; admitted: boolean;
@ -220,6 +221,13 @@ export default class MembersList extends Vue {
apiServer = ""; apiServer = "";
contacts: Array<Contact> = []; contacts: Array<Contact> = [];
/**
* Get the unnamed member constant
*/
get unnamedMember(): string {
return UNNAMED_MEMBER;
}
async created() { async created() {
this.notify = createNotifyHelpers(this.$notify); this.notify = createNotifyHelpers(this.$notify);

10
src/components/ProjectCard.vue

@ -15,7 +15,7 @@ issuer information. * * @author Matthew Raymer */
<h3 <h3
class="text-xs font-medium text-ellipsis whitespace-nowrap overflow-hidden" class="text-xs font-medium text-ellipsis whitespace-nowrap overflow-hidden"
> >
{{ project.name || "Unnamed Project" }} {{ project.name || unnamedProject }}
</h3> </h3>
<div class="text-xs text-slate-500 truncate"> <div class="text-xs text-slate-500 truncate">
@ -31,6 +31,7 @@ import ProjectIcon from "./ProjectIcon.vue";
import { PlanData } from "../interfaces/records"; import { PlanData } from "../interfaces/records";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { didInfo } from "../libs/endorserServer"; import { didInfo } from "../libs/endorserServer";
import { UNNAMED_PROJECT } from "@/constants/entities";
/** /**
* ProjectCard - Displays a project entity with selection capability * ProjectCard - Displays a project entity with selection capability
@ -63,6 +64,13 @@ export default class ProjectCard extends Vue {
@Prop({ required: true }) @Prop({ required: true })
allContacts!: Contact[]; allContacts!: Contact[];
/**
* Get the unnamed project constant
*/
get unnamedProject(): string {
return UNNAMED_PROJECT;
}
/** /**
* Computed display name for the project issuer * Computed display name for the project issuer
*/ */

3
src/components/PushNotificationPermission.vue

@ -115,6 +115,7 @@ import { urlBase64ToUint8Array } from "../libs/crypto/vc/util";
import * as libsUtil from "../libs/util"; import * as libsUtil from "../libs/util";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
import { PlatformServiceMixin } from "../utils/PlatformServiceMixin"; import { PlatformServiceMixin } from "../utils/PlatformServiceMixin";
import { UNNAMED_ENTITY_NAME } from "@/constants/entities";
// Example interface for error // Example interface for error
interface ErrorResponse { interface ErrorResponse {
@ -602,7 +603,7 @@ export default class PushNotificationPermission extends Vue {
* Returns the default message for direct push * Returns the default message for direct push
*/ */
get notificationMessagePlaceholder(): string { get notificationMessagePlaceholder(): string {
return "Click to share some gratitude with the world -- even if they're unnamed."; return `Click to share some gratitude with the world -- even if they're ${UNNAMED_ENTITY_NAME.toLowerCase()}.`;
} }
/** /**

17
src/constants/entities.ts

@ -0,0 +1,17 @@
/**
* Constants for entity-related strings, particularly for unnamed/unknown person entities
*/
// Core unnamed entity names
export const UNNAMED_ENTITY_NAME = "Unnamed";
// Descriptive phrases for unnamed entities
export const SOMEONE_UNNAMED = "Someone Unnamed";
export const UNNAMED_MEMBER = "Unnamed Member";
export const UNNAMED_PERSON = "That unnamed person";
export const UNNAMED_USER = "unnamed user";
// Project-related unnamed entities
export const UNNAMED_PROJECT = "Unnamed Project";

5
src/constants/notifications.ts

@ -1,4 +1,5 @@
import axios from "axios"; import axios from "axios";
import { UNNAMED_PERSON } from "./entities";
// Notification message constants for user-facing notifications // Notification message constants for user-facing notifications
// Add new notification messages here as needed // Add new notification messages here as needed
@ -867,7 +868,7 @@ export const NOTIFY_CONTACT_LINK_COPIED = {
// Template for registration success message // Template for registration success message
// Used in: ContactsView.vue (register method - registration success with contact name) // Used in: ContactsView.vue (register method - registration success with contact name)
export const getRegisterPersonSuccessMessage = (name?: string): string => export const getRegisterPersonSuccessMessage = (name?: string): string =>
`${name || "That unnamed person"} ${NOTIFY_REGISTER_PERSON_SUCCESS.message}`; `${name || UNNAMED_PERSON} ${NOTIFY_REGISTER_PERSON_SUCCESS.message}`;
// Template for visibility success message // Template for visibility success message
// Used in: ContactsView.vue (setVisibility method - visibility success with contact name) // Used in: ContactsView.vue (setVisibility method - visibility success with contact name)
@ -1372,7 +1373,7 @@ export function createQRContactAddedMessage(hasVisibility: boolean): string {
export function createQRRegistrationSuccessMessage( export function createQRRegistrationSuccessMessage(
contactName: string, contactName: string,
): string { ): string {
return `${contactName || "That unnamed person"}${NOTIFY_QR_REGISTRATION_SUCCESS.message}`; return `${contactName || UNNAMED_PERSON}${NOTIFY_QR_REGISTRATION_SUCCESS.message}`;
} }
// ContactQRScanShowView.vue timeout constants // ContactQRScanShowView.vue timeout constants

3
src/libs/endorserServer.ts

@ -60,6 +60,7 @@ import { PlanSummaryRecord } from "../interfaces/records";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; import { PlatformServiceFactory } from "@/services/PlatformServiceFactory";
import { APP_SERVER } from "@/constants/app"; import { APP_SERVER } from "@/constants/app";
import { SOMEONE_UNNAMED } from "@/constants/entities";
/** /**
* Standard context for schema.org data * Standard context for schema.org data
@ -309,7 +310,7 @@ export function didInfoForContact(
showDidForVisible: boolean = false, showDidForVisible: boolean = false,
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
): { known: boolean; displayName: string; profileImageUrl?: string } { ): { known: boolean; displayName: string; profileImageUrl?: string } {
if (!did) return { displayName: "Someone Unnamed/Unknown", known: false }; if (!did) return { displayName: SOMEONE_UNNAMED, known: false };
if (did === activeDid) { if (did === activeDid) {
return { displayName: "You", known: true }; return { displayName: "You", known: true };
} else if (contact) { } else if (contact) {

3
src/libs/util.ts

@ -33,6 +33,7 @@ import { logger } from "../utils/logger";
import { PlatformServiceFactory } from "../services/PlatformServiceFactory"; import { PlatformServiceFactory } from "../services/PlatformServiceFactory";
import { IIdentifier } from "@veramo/core"; import { IIdentifier } from "@veramo/core";
import { DEFAULT_ROOT_DERIVATION_PATH } from "./crypto"; import { DEFAULT_ROOT_DERIVATION_PATH } from "./crypto";
import { UNNAMED_USER } from "@/constants/entities";
// Consolidate this with src/utils/PlatformServiceMixin.mapQueryResultToValues // Consolidate this with src/utils/PlatformServiceMixin.mapQueryResultToValues
function mapQueryResultToValues( function mapQueryResultToValues(
@ -192,7 +193,7 @@ export const nameForContact = (
): string => { ): string => {
return ( return (
(contact?.name as string) || (contact?.name as string) ||
(capitalize ? "This" : "this") + " unnamed user" (capitalize ? "This" : "this") + " " + UNNAMED_USER
); );
}; };

23
src/views/ContactGiftingView.vue

@ -42,13 +42,13 @@
icon="circle-question" icon="circle-question"
class="text-slate-400 text-4xl shrink-0" class="text-slate-400 text-4xl shrink-0"
/> />
<span class="text-ellipsis overflow-hidden italic text-slate-500">(Unnamed/Unknown)</span> <span class="text-ellipsis overflow-hidden italic text-slate-500">{{ unnamedEntityName }}</span>
</span> </span>
<span class="text-right"> <span class="text-right">
<button <button
type="button" type="button"
class="block w-full text-center text-sm uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md" class="block w-full text-center text-sm uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md"
@click="openDialog({ did: '', name: 'Unnamed' })" @click="openDialog({ did: '', name: unnamedEntityName })"
> >
<font-awesome icon="gift" class="fa-fw"></font-awesome> <font-awesome icon="gift" class="fa-fw"></font-awesome>
</button> </button>
@ -108,6 +108,7 @@ import { GiverReceiverInputInfo } from "../libs/util";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin"; import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin";
import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify"; import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify";
import { UNNAMED_ENTITY_NAME } from "@/constants/entities";
@Component({ @Component({
components: { GiftedDialog, QuickNav, EntityIcon }, components: { GiftedDialog, QuickNav, EntityIcon },
mixins: [PlatformServiceMixin], mixins: [PlatformServiceMixin],
@ -246,7 +247,7 @@ export default class ContactGiftingView extends Vue {
return { did: this.activeDid, name: "You" }; return { did: this.activeDid, name: "You" };
} else if (!contact.did || contact.did === "") { } else if (!contact.did || contact.did === "") {
// If DID is empty/null, create "Unnamed" entity // If DID is empty/null, create "Unnamed" entity
return { did: "", name: "Unnamed" }; return { did: "", name: UNNAMED_ENTITY_NAME };
} else { } else {
// Create a copy of the contact to avoid modifying the original // Create a copy of the contact to avoid modifying the original
return { ...contact }; return { ...contact };
@ -267,7 +268,7 @@ export default class ContactGiftingView extends Vue {
return { giver, recipient }; return { giver, recipient };
} else { } else {
// We're selecting a recipient, so the selected entity becomes the recipient // We're selecting a recipient, so the selected entity becomes the recipient
const recipient = selectedEntity || { did: "", name: "Unnamed" }; const recipient = selectedEntity || { did: "", name: UNNAMED_ENTITY_NAME };
const giver = this.createGiverFromContext(); const giver = this.createGiverFromContext();
return { giver, recipient }; return { giver, recipient };
} }
@ -292,7 +293,7 @@ export default class ContactGiftingView extends Vue {
name: this.recipientProjectName, name: this.recipientProjectName,
}; };
} else { } else {
return { did: "", name: "Unnamed" }; return { did: "", name: UNNAMED_ENTITY_NAME };
} }
} }
} }
@ -316,11 +317,20 @@ export default class ContactGiftingView extends Vue {
name: this.giverProjectName, name: this.giverProjectName,
}; };
} else { } else {
return { did: "", name: "Unnamed" }; return { did: "", name: UNNAMED_ENTITY_NAME };
} }
} }
} }
/**
* Get the unnamed entity name constant
*/
get unnamedEntityName(): string {
return UNNAMED_ENTITY_NAME;
}
get shouldShowYouEntity(): boolean { get shouldShowYouEntity(): boolean {
if (this.stepType === "giver") { if (this.stepType === "giver") {
// When selecting a giver, show "You" if the current recipient is not "You" // When selecting a giver, show "You" if the current recipient is not "You"
@ -346,3 +356,4 @@ export default class ContactGiftingView extends Vue {
} }
} }
</script> </script>

3
src/views/DIDView.vue

@ -290,6 +290,7 @@ import {
NOTIFY_SERVER_ACCESS_ERROR, NOTIFY_SERVER_ACCESS_ERROR,
NOTIFY_NO_IDENTITY_ERROR, NOTIFY_NO_IDENTITY_ERROR,
} from "@/constants/notifications"; } from "@/constants/notifications";
import { UNNAMED_PERSON } from "@/constants/entities";
/** /**
* DIDView Component * DIDView Component
@ -549,7 +550,7 @@ export default class DIDView extends Vue {
contact.registered = true; contact.registered = true;
await this.$updateContact(contact.did, { registered: true }); await this.$updateContact(contact.did, { registered: true });
const name = contact.name || "That unnamed person"; const name = contact.name || UNNAMED_PERSON;
this.notify.success( this.notify.success(
`${name} ${NOTIFY_REGISTRATION_SUCCESS.message}`, `${name} ${NOTIFY_REGISTRATION_SUCCESS.message}`,
TIMEOUTS.LONG, TIMEOUTS.LONG,

10
src/views/DiscoverView.vue

@ -233,7 +233,7 @@
<div class="grow"> <div class="grow">
<h2 class="text-base font-semibold"> <h2 class="text-base font-semibold">
{{ project.name || "Unnamed Project" }} {{ project.name || unnamedProject }}
</h2> </h2>
<div class="text-sm"> <div class="text-sm">
<font-awesome <font-awesome
@ -340,6 +340,7 @@ import {
NOTIFY_DISCOVER_LOCAL_SEARCH_ERROR, NOTIFY_DISCOVER_LOCAL_SEARCH_ERROR,
NOTIFY_DISCOVER_MAP_SEARCH_ERROR, NOTIFY_DISCOVER_MAP_SEARCH_ERROR,
} from "@/constants/notifications"; } from "@/constants/notifications";
import { UNNAMED_PROJECT } from "@/constants/entities";
interface Tile { interface Tile {
indexLat: number; indexLat: number;
indexLon: number; indexLon: number;
@ -370,6 +371,13 @@ export default class DiscoverView extends Vue {
notify!: ReturnType<typeof createNotifyHelpers>; notify!: ReturnType<typeof createNotifyHelpers>;
/**
* Get the unnamed project constant
*/
get unnamedProject(): string {
return UNNAMED_PROJECT;
}
activeDid = ""; activeDid = "";
allContacts: Array<Contact> = []; allContacts: Array<Contact> = [];
allMyDids: Array<string> = []; allMyDids: Array<string> = [];

10
src/views/HelpView.vue

@ -199,7 +199,7 @@
</p> </p>
<p> <p>
Then you can record your appreciation for... whatever: select any contact on the home page Then you can record your appreciation for... whatever: select any contact on the home page
(or "Unnamed") and send it. The main goal is to record what people (or "{{ unnamedEntityName }}") and send it. The main goal is to record what people
have given you, to grow giving economies. You can also record your own have given you, to grow giving economies. You can also record your own
ideas for projects. Each claim is recorded on a ideas for projects. Each claim is recorded on a
custom ledger. custom ledger.
@ -598,6 +598,7 @@ import * as Package from "../../package.json";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { APP_SERVER } from "../constants/app"; import { APP_SERVER } from "../constants/app";
import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin"; import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin";
import { UNNAMED_ENTITY_NAME } from "@/constants/entities";
/** /**
* HelpView.vue - Comprehensive Help System Component * HelpView.vue - Comprehensive Help System Component
@ -645,6 +646,13 @@ export default class HelpView extends Vue {
APP_SERVER = APP_SERVER; APP_SERVER = APP_SERVER;
Capacitor = Capacitor; Capacitor = Capacitor;
/**
* Get the unnamed entity name constant
*/
get unnamedEntityName(): string {
return UNNAMED_ENTITY_NAME;
}
// Ideally, we put no functionality in here, especially in the setup, // Ideally, we put no functionality in here, especially in the setup,
// because we never want this page to have a chance of throwing an error. // because we never want this page to have a chance of throwing an error.

3
src/views/HomeView.vue

@ -305,6 +305,7 @@ import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin";
import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify"; import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify";
import { NOTIFY_CONTACT_LOADING_ISSUE } from "@/constants/notifications"; import { NOTIFY_CONTACT_LOADING_ISSUE } from "@/constants/notifications";
import * as Package from "../../package.json"; import * as Package from "../../package.json";
import { UNNAMED_ENTITY_NAME } from "@/constants/entities";
// consolidate this with GiveActionClaim in src/interfaces/claims.ts // consolidate this with GiveActionClaim in src/interfaces/claims.ts
interface Claim { interface Claim {
@ -1506,7 +1507,7 @@ export default class HomeView extends Vue {
return { did: this.activeDid, name: "You" }; return { did: this.activeDid, name: "You" };
} else if (!giver.did || giver.did === "") { } else if (!giver.did || giver.did === "") {
// If DID is empty/null, create "Unnamed" entity // If DID is empty/null, create "Unnamed" entity
return { did: "", name: "Unnamed" }; return { did: "", name: UNNAMED_ENTITY_NAME };
} else { } else {
// Return the giver as-is // Return the giver as-is
return giver; return giver;

12
src/views/ProjectViewView.vue

@ -183,7 +183,7 @@
class="text-blue-500" class="text-blue-500"
@click="onClickLoadProject(plan.handleId)" @click="onClickLoadProject(plan.handleId)"
> >
{{ plan.name || "Unnamed Project" }} {{ plan.name || unnamedProject }}
</button> </button>
</div> </div>
<div v-if="fulfillersToHitLimit" class="text-center"> <div v-if="fulfillersToHitLimit" class="text-center">
@ -207,7 +207,7 @@
class="text-blue-500" class="text-blue-500"
@click="onClickLoadProject(fulfilledByThis.handleId)" @click="onClickLoadProject(fulfilledByThis.handleId)"
> >
{{ fulfilledByThis.name || "Unnamed Project" }} {{ fulfilledByThis.name || unnamedProject }}
</button> </button>
</div> </div>
</div> </div>
@ -611,6 +611,7 @@ import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin";
import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify"; import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify";
import { NOTIFY_CONFIRM_CLAIM } from "@/constants/notifications"; import { NOTIFY_CONFIRM_CLAIM } from "@/constants/notifications";
import { APP_SERVER } from "@/constants/app"; import { APP_SERVER } from "@/constants/app";
import { UNNAMED_PROJECT } from "@/constants/entities";
/** /**
* Project View Component * Project View Component
* @author Matthew Raymer * @author Matthew Raymer
@ -664,6 +665,13 @@ export default class ProjectViewView extends Vue {
/** Notification helpers instance */ /** Notification helpers instance */
notify!: ReturnType<typeof createNotifyHelpers>; notify!: ReturnType<typeof createNotifyHelpers>;
/**
* Get the unnamed project constant
*/
get unnamedProject(): string {
return UNNAMED_PROJECT;
}
// Account and Settings State // Account and Settings State
/** Currently active DID */ /** Currently active DID */
activeDid = ""; activeDid = "";

10
src/views/ProjectsView.vue

@ -247,7 +247,7 @@
<div class="grow overflow-hidden"> <div class="grow overflow-hidden">
<h2 class="text-base font-semibold"> <h2 class="text-base font-semibold">
{{ project.name || "Unnamed Project" }} {{ project.name || unnamedProject }}
</h2> </h2>
<div class="text-sm truncate"> <div class="text-sm truncate">
{{ project.description }} {{ project.description }}
@ -289,6 +289,7 @@ import {
NOTIFY_OFFERS_FETCH_ERROR, NOTIFY_OFFERS_FETCH_ERROR,
NOTIFY_CAMERA_SHARE_METHOD, NOTIFY_CAMERA_SHARE_METHOD,
} from "@/constants/notifications"; } from "@/constants/notifications";
import { UNNAMED_PROJECT } from "@/constants/entities";
/** /**
* Projects View Component * Projects View Component
@ -327,6 +328,13 @@ export default class ProjectsView extends Vue {
notify!: ReturnType<typeof createNotifyHelpers>; notify!: ReturnType<typeof createNotifyHelpers>;
/**
* Get the unnamed project constant
*/
get unnamedProject(): string {
return UNNAMED_PROJECT;
}
// User account state // User account state
activeDid = ""; activeDid = "";
allContacts: Array<Contact> = []; allContacts: Array<Contact> = [];

3
test-playwright/00-noid-tests.spec.ts

@ -69,6 +69,7 @@
*/ */
import { test, expect } from '@playwright/test'; import { test, expect } from '@playwright/test';
import { UNNAMED_ENTITY_NAME } from '../src/constants/entities';
import { deleteContact, generateAndRegisterEthrUser, importUser } from './testUtils'; import { deleteContact, generateAndRegisterEthrUser, importUser } from './testUtils';
test('Check activity feed - check that server is running', async ({ page }) => { test('Check activity feed - check that server is running', async ({ page }) => {
@ -177,7 +178,7 @@ test('Check User 0 can register a random person', async ({ page }) => {
await page.goto('./'); await page.goto('./');
await page.getByTestId('closeOnboardingAndFinish').click(); await page.getByTestId('closeOnboardingAndFinish').click();
await page.getByRole('button', { name: 'Person' }).click(); await page.getByRole('button', { name: 'Person' }).click();
await page.getByRole('listitem').filter({ hasText: 'Unnamed' }).locator('svg').click(); await page.getByRole('listitem').filter({ hasText: UNNAMED_ENTITY_NAME }).locator('svg').click();
await page.getByPlaceholder('What was given').fill('Gave me access!'); await page.getByPlaceholder('What was given').fill('Gave me access!');
await page.getByRole('button', { name: 'Sign & Send' }).click(); await page.getByRole('button', { name: 'Sign & Send' }).click();
await expect(page.getByText('That gift was recorded.')).toBeVisible(); await expect(page.getByText('That gift was recorded.')).toBeVisible();

3
test-playwright/30-record-gift.spec.ts

@ -79,6 +79,7 @@
* ``` * ```
*/ */
import { test, expect } from '@playwright/test'; import { test, expect } from '@playwright/test';
import { UNNAMED_ENTITY_NAME } from '../src/constants/entities';
import { importUser } from './testUtils'; import { importUser } from './testUtils';
test('Record something given', async ({ page }) => { test('Record something given', async ({ page }) => {
@ -101,7 +102,7 @@ test('Record something given', async ({ page }) => {
await page.goto('./'); await page.goto('./');
await page.getByTestId('closeOnboardingAndFinish').click(); await page.getByTestId('closeOnboardingAndFinish').click();
await page.getByRole('button', { name: 'Person' }).click(); await page.getByRole('button', { name: 'Person' }).click();
await page.getByRole('listitem').filter({ hasText: 'Unnamed' }).locator('svg').click(); await page.getByRole('listitem').filter({ hasText: UNNAMED_ENTITY_NAME }).locator('svg').click();
await page.getByPlaceholder('What was given').fill(finalTitle); await page.getByPlaceholder('What was given').fill(finalTitle);
await page.getByRole('spinbutton').fill(randomNonZeroNumber.toString()); await page.getByRole('spinbutton').fill(randomNonZeroNumber.toString());
await page.getByRole('button', { name: 'Sign & Send' }).click(); await page.getByRole('button', { name: 'Sign & Send' }).click();

3
test-playwright/33-record-gift-x10.spec.ts

@ -85,6 +85,7 @@
*/ */
import { test, expect } from '@playwright/test'; import { test, expect } from '@playwright/test';
import { UNNAMED_ENTITY_NAME } from '../src/constants/entities';
import { importUser, createUniqueStringsArray, createRandomNumbersArray } from './testUtils'; import { importUser, createUniqueStringsArray, createRandomNumbersArray } from './testUtils';
test('Record 9 new gifts', async ({ page }) => { test('Record 9 new gifts', async ({ page }) => {
@ -116,7 +117,7 @@ test('Record 9 new gifts', async ({ page }) => {
await page.getByTestId('closeOnboardingAndFinish').click(); await page.getByTestId('closeOnboardingAndFinish').click();
} }
await page.getByRole('button', { name: 'Person' }).click(); await page.getByRole('button', { name: 'Person' }).click();
await page.getByRole('listitem').filter({ hasText: 'Unnamed' }).locator('svg').click(); await page.getByRole('listitem').filter({ hasText: UNNAMED_ENTITY_NAME }).locator('svg').click();
await page.getByPlaceholder('What was given').fill(finalTitles[i]); await page.getByPlaceholder('What was given').fill(finalTitles[i]);
await page.getByRole('spinbutton').fill(finalNumbers[i].toString()); await page.getByRole('spinbutton').fill(finalNumbers[i].toString());
await page.getByRole('button', { name: 'Sign & Send' }).click(); await page.getByRole('button', { name: 'Sign & Send' }).click();

Loading…
Cancel
Save