agent-twitter-summary
Version:
A twitter client for agents
98 lines (87 loc) • 3.66 kB
text/typescript
import { Profile } from './profile';
import { getScraper } from './test-utils';
test('scraper can get screen name by user id', async () => {
const scraper = await getScraper();
const screenName = await scraper.getScreenNameByUserId('1586562503865008129');
expect(screenName).toEqual('ligma__sigma');
});
test('scraper can get profile', async () => {
const expected: Profile = {
avatar:
'https://pbs.twimg.com/profile_images/436075027193004032/XlDa2oaz.jpeg',
banner: 'https://pbs.twimg.com/profile_banners/106037940/1541084318',
biography: 'nothing',
isPrivate: false,
isVerified: false,
joined: new Date(Date.UTC(2010, 0, 18, 8, 49, 30, 0)),
location: 'Ukraine',
name: 'Nomadic',
pinnedTweetIds: [],
url: 'https://twitter.com/nomadic_ua',
userId: '106037940',
username: 'nomadic_ua',
website: 'https://nomadic.name',
};
const scraper = await getScraper();
const actual = await scraper.getProfile('nomadic_ua');
expect(actual.avatar).toEqual(expected.avatar);
expect(actual.banner).toEqual(expected.banner);
expect(actual.biography).toEqual(expected.biography);
expect(actual.isPrivate).toEqual(expected.isPrivate);
expect(actual.isVerified).toEqual(expected.isVerified);
expect(actual.joined).toEqual(expected.joined);
expect(actual.location).toEqual(expected.location);
expect(actual.name).toEqual(expected.name);
expect(actual.pinnedTweetIds).toEqual(expected.pinnedTweetIds);
expect(actual.url).toEqual(expected.url);
expect(actual.userId).toEqual(expected.userId);
expect(actual.username).toEqual(expected.username);
expect(actual.website).toEqual(expected.website);
});
test('scraper can get partial private profile', async () => {
const expected: Profile = {
avatar:
'https://pbs.twimg.com/profile_images/1612213936082030594/_HEsjv7Q.jpg',
banner:
'https://pbs.twimg.com/profile_banners/1221221876849995777/1673110776',
biography: `t h e h e r m i t`,
isPrivate: true,
isVerified: false,
joined: new Date(Date.UTC(2020, 0, 26, 0, 3, 5, 0)),
location: 'sometimes',
name: 'private account',
pinnedTweetIds: [],
url: 'https://twitter.com/tomdumont',
userId: '1221221876849995777',
username: 'tomdumont',
website: undefined,
};
const scraper = await getScraper();
const actual = await scraper.getProfile('tomdumont');
expect(actual.avatar).toEqual(expected.avatar);
expect(actual.banner).toEqual(expected.banner);
expect(actual.biography).toEqual(expected.biography);
expect(actual.isPrivate).toEqual(expected.isPrivate);
expect(actual.isVerified).toEqual(expected.isVerified);
expect(actual.joined).toEqual(expected.joined);
expect(actual.location).toEqual(expected.location);
expect(actual.name).toEqual(expected.name);
expect(actual.pinnedTweetIds).toEqual(expected.pinnedTweetIds);
expect(actual.url).toEqual(expected.url);
expect(actual.userId).toEqual(expected.userId);
expect(actual.username).toEqual(expected.username);
expect(actual.website).toEqual(expected.website);
});
test('scraper cannot get suspended profile', async () => {
const scraper = await getScraper();
// taken from https://en.wikipedia.org/wiki/Twitter_suspensions#List_of_notable_suspensions
expect(scraper.getProfile('RobertC20041800')).rejects.toThrow();
});
test('scraper cannot get not found profile', async () => {
const scraper = await getScraper();
expect(scraper.getProfile('sample3123131')).rejects.toThrow();
});
test('scraper can get profile by screen name', async () => {
const scraper = await getScraper();
await scraper.getProfile('Twitter');
});