Skip to main content
Glama

Apple MCP Server

contacts.test.ts5.35 kB
import { describe, it, expect } from "bun:test"; import { TEST_DATA } from "../fixtures/test-data.js"; import { assertNotEmpty, assertValidPhoneNumber } from "../helpers/test-utils.js"; import contactsModule from "../../utils/contacts.js"; describe("Contacts Integration Tests", () => { describe("getAllNumbers", () => { it("should retrieve all contacts with phone numbers", async () => { const allNumbers = await contactsModule.getAllNumbers(); expect(typeof allNumbers).toBe("object"); expect(allNumbers).not.toBeNull(); // Should contain our test contact if it exists const contactNames = Object.keys(allNumbers); console.log(`Found ${contactNames.length} contacts with phone numbers`); // Verify structure - each contact should have an array of phone numbers for (const [name, phoneNumbers] of Object.entries(allNumbers)) { expect(typeof name).toBe("string"); expect(Array.isArray(phoneNumbers)).toBe(true); // Some contacts might have empty phone number arrays, so just check structure if (phoneNumbers.length > 0) { // Verify each phone number is a string for (const phoneNumber of phoneNumbers) { expect(typeof phoneNumber).toBe("string"); expect(phoneNumber.length).toBeGreaterThan(0); } } } }, 15000); // 15 second timeout for contacts access }); describe("findNumber", () => { it("should find phone number for existing contact", async () => { const phoneNumbers = await contactsModule.findNumber("Test Contact"); // If our test contact exists, it should return phone numbers if (phoneNumbers.length > 0) { assertNotEmpty(phoneNumbers, "Expected to find phone numbers for test contact"); // Only validate if we actually have a phone number if (phoneNumbers[0]) { assertValidPhoneNumber(phoneNumbers[0]); } console.log(`Found phone numbers for test contact: ${phoneNumbers.join(", ")}`); } else { console.log("Test contact not found - this is expected if test contact hasn't been created yet"); } }, 10000); it("should return empty array for non-existent contact", async () => { const phoneNumbers = await contactsModule.findNumber("NonExistentContactName123456"); expect(Array.isArray(phoneNumbers)).toBe(true); expect(phoneNumbers.length).toBe(0); }, 10000); it("should handle partial name matches", async () => { // Try to find contacts with partial name const phoneNumbers = await contactsModule.findNumber("Test"); // This might return results if there are contacts with "Test" in their name expect(Array.isArray(phoneNumbers)).toBe(true); if (phoneNumbers.length > 0) { console.log(`Found ${phoneNumbers.length} phone numbers for partial match 'Test'`); for (const phoneNumber of phoneNumbers) { expect(typeof phoneNumber).toBe("string"); } } }, 10000); }); describe("findContactByPhone", () => { it("should find contact by phone number", async () => { const contactName = await contactsModule.findContactByPhone(TEST_DATA.PHONE_NUMBER); if (contactName) { expect(typeof contactName).toBe("string"); expect(contactName.length).toBeGreaterThan(0); console.log(`Found contact name for ${TEST_DATA.PHONE_NUMBER}: ${contactName}`); } else { console.log(`No contact found for ${TEST_DATA.PHONE_NUMBER} - this is expected if test contact doesn't exist`); } }, 10000); it("should return null for non-existent phone number", async () => { const contactName = await contactsModule.findContactByPhone("+1 9999999999"); expect(contactName).toBeNull(); }, 10000); it("should handle different phone number formats", async () => { const testNumbers = [ TEST_DATA.PHONE_NUMBER, TEST_DATA.PHONE_NUMBER.replace(/[^0-9]/g, ""), // Remove formatting TEST_DATA.PHONE_NUMBER.replace("+1 ", ""), // Remove country code prefix TEST_DATA.PHONE_NUMBER.replace(/\s/g, "") // Remove spaces ]; for (const phoneNumber of testNumbers) { const contactName = await contactsModule.findContactByPhone(phoneNumber); if (contactName) { console.log(`Format ${phoneNumber} found contact: ${contactName}`); } else { console.log(`Format ${phoneNumber} did not find contact`); } // Should return null or string, never undefined expect(contactName === null || typeof contactName === "string").toBe(true); } }, 15000); }); describe("Error Handling", () => { it("should handle empty string input gracefully", async () => { const phoneNumbers = await contactsModule.findNumber(""); expect(Array.isArray(phoneNumbers)).toBe(true); }, 5000); it("should handle null/undefined phone number search gracefully", async () => { const contactName1 = await contactsModule.findContactByPhone(""); const contactName2 = await contactsModule.findContactByPhone("invalid"); expect(contactName1).toBeNull(); expect(contactName2).toBeNull(); }, 5000); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/supermemoryai/apple-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server