-
Notifications
You must be signed in to change notification settings - Fork 107
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: parsed users dm conversations and send messages related to users
- Loading branch information
Showing
2 changed files
with
286 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
import { getScraper } from './test-utils'; | ||
import { jest } from '@jest/globals'; | ||
|
||
let shouldSkipV2Tests = false; | ||
let testUserId: string; | ||
let testConversationId: string; | ||
|
||
beforeAll(async () => { | ||
const { | ||
TWITTER_API_KEY, | ||
TWITTER_API_SECRET_KEY, | ||
TWITTER_ACCESS_TOKEN, | ||
TWITTER_ACCESS_TOKEN_SECRET, | ||
TWITTER_USERNAME, | ||
} = process.env; | ||
|
||
if ( | ||
!TWITTER_API_KEY || | ||
!TWITTER_API_SECRET_KEY || | ||
!TWITTER_ACCESS_TOKEN || | ||
!TWITTER_ACCESS_TOKEN_SECRET || | ||
!TWITTER_USERNAME | ||
) { | ||
console.warn( | ||
'Skipping tests: Twitter API v2 keys are not available in environment variables.', | ||
); | ||
shouldSkipV2Tests = true; | ||
return; | ||
} | ||
|
||
try { | ||
// Get the user ID from username | ||
const scraper = await getScraper(); | ||
const profile = await scraper.getProfile(TWITTER_USERNAME); | ||
|
||
if (!profile.userId) { | ||
throw new Error('User ID not found'); | ||
} | ||
|
||
testUserId = profile.userId; | ||
|
||
// Get first conversation ID for testing | ||
const conversations = await scraper.getDirectMessageConversations( | ||
testUserId, | ||
); | ||
|
||
if ( | ||
!conversations.conversations.length && | ||
!conversations.conversations[0].conversationId | ||
) { | ||
throw new Error('No conversations found'); | ||
} | ||
|
||
// testConversationId = conversations.conversations[0].conversationId; | ||
testConversationId = '1025530896651362304-1247854858931040258'; | ||
} catch (error) { | ||
console.error('Failed to initialize test data:', error); | ||
shouldSkipV2Tests = true; | ||
} | ||
}); | ||
|
||
describe('Direct Message Tests', () => { | ||
beforeEach(() => { | ||
if (shouldSkipV2Tests || !testUserId || !testConversationId) { | ||
console.warn('Skipping test: Required test data not available'); | ||
return; | ||
} | ||
}); | ||
|
||
test('should get DM conversations', async () => { | ||
if (shouldSkipV2Tests) return; | ||
|
||
const scraper = await getScraper(); | ||
const conversations = await scraper.getDirectMessageConversations( | ||
testUserId, | ||
); | ||
|
||
expect(conversations).toBeDefined(); | ||
expect(conversations.conversations).toBeInstanceOf(Array); | ||
expect(conversations.users).toBeInstanceOf(Array); | ||
}, 30000); | ||
|
||
test('should handle DM send failure gracefully', async () => { | ||
if (shouldSkipV2Tests) return; | ||
|
||
const scraper = await getScraper(); | ||
const invalidConversationId = 'invalid-id'; | ||
|
||
await expect( | ||
scraper.sendDirectMessage(invalidConversationId, 'test message'), | ||
).rejects.toThrow(); | ||
}, 30000); | ||
|
||
test('should verify DM conversation structure', async () => { | ||
if (shouldSkipV2Tests) return; | ||
|
||
const scraper = await getScraper(); | ||
const conversations = await scraper.getDirectMessageConversations( | ||
testUserId, | ||
); | ||
|
||
if (conversations.conversations.length > 0) { | ||
const conversation = conversations.conversations[0]; | ||
|
||
// Test conversation structure | ||
expect(conversation).toHaveProperty('conversationId'); | ||
expect(conversation).toHaveProperty('messages'); | ||
expect(conversation).toHaveProperty('participants'); | ||
|
||
// Test participants structure | ||
expect(conversation.participants[0]).toHaveProperty('id'); | ||
expect(conversation.participants[0]).toHaveProperty('screenName'); | ||
|
||
// Test message structure if messages exist | ||
if (conversation.messages.length > 0) { | ||
const message = conversation.messages[0]; | ||
expect(message).toHaveProperty('id'); | ||
expect(message).toHaveProperty('text'); | ||
expect(message).toHaveProperty('senderId'); | ||
expect(message).toHaveProperty('recipientId'); | ||
expect(message).toHaveProperty('createdAt'); | ||
} | ||
} | ||
}, 30000); | ||
}); |
Oops, something went wrong.