mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-05-25 07:05:51 +00:00
- Add integration test on dataexport endpoint - Add library with unit test for xml marshalling
424 lines
14 KiB
JavaScript
424 lines
14 KiB
JavaScript
import moment from 'moment';
|
|
|
|
import { generateUser, requester } from '../../../helpers/api-integration/v3';
|
|
import { Task } from '../../../../website/server/models/task';
|
|
|
|
describe('GET /export/userdata.xml', () => {
|
|
let user;
|
|
|
|
before(async () => {
|
|
user = await generateUser();
|
|
});
|
|
|
|
it('returns the xml for a minimum viable user', async () => {
|
|
const xml = await requester(user).get('/export/userdata.xml');
|
|
|
|
const userId = user.id;
|
|
const userName = user.auth.local.username;
|
|
const dateTime = moment(user.auth.timestamps.created).toDate();
|
|
const taskId = (await Task.findOne({ userId }, 'id').exec())._id;
|
|
|
|
expect(xml).to.equal(`<user>
|
|
<auth>
|
|
<local>
|
|
<username>${userName}</username>
|
|
<lowerCaseUsername>${userName}</lowerCaseUsername>
|
|
<email>${userName}@example.com</email>
|
|
</local>
|
|
<timestamps>
|
|
<created>${dateTime}</created>
|
|
<loggedin>${dateTime}</loggedin>
|
|
<updated>${dateTime}</updated>
|
|
</timestamps>
|
|
<facebook/>
|
|
<google/>
|
|
<apple/>
|
|
</auth>
|
|
<achievements>
|
|
<ultimateGearSets>
|
|
<healer>false</healer>
|
|
<wizard>false</wizard>
|
|
<rogue>false</rogue>
|
|
<warrior>false</warrior>
|
|
</ultimateGearSets>
|
|
<streak>0</streak>
|
|
<perfect>0</perfect>
|
|
<quests/>
|
|
</achievements>
|
|
<backer/>
|
|
<contributor/>
|
|
<purchased>
|
|
<ads>false</ads>
|
|
<txnCount>0</txnCount>
|
|
<skin/>
|
|
<hair/>
|
|
<shirt/>
|
|
<background>
|
|
<violet>true</violet>
|
|
</background>
|
|
<plan>
|
|
<consecutive>
|
|
<count>0</count>
|
|
<offset>0</offset>
|
|
<gemCapExtra>0</gemCapExtra>
|
|
<trinkets>0</trinkets>
|
|
</consecutive>
|
|
<quantity>1</quantity>
|
|
<extraMonths>0</extraMonths>
|
|
<gemsBought>0</gemsBought>
|
|
</plan>
|
|
</purchased>
|
|
<flags>
|
|
<tour>
|
|
<intro>-2</intro>
|
|
<classes>-2</classes>
|
|
<stats>-2</stats>
|
|
<tavern>-2</tavern>
|
|
<party>-2</party>
|
|
<guilds>-2</guilds>
|
|
<challenges>-2</challenges>
|
|
<market>-2</market>
|
|
<pets>-2</pets>
|
|
<mounts>-2</mounts>
|
|
<hall>-2</hall>
|
|
<equipment>-2</equipment>
|
|
</tour>
|
|
<tutorial>
|
|
<common>
|
|
<habits>false</habits>
|
|
<dailies>false</dailies>
|
|
<todos>false</todos>
|
|
<rewards>false</rewards>
|
|
<party>false</party>
|
|
<pets>false</pets>
|
|
<gems>false</gems>
|
|
<skills>false</skills>
|
|
<classes>false</classes>
|
|
<tavern>false</tavern>
|
|
<equipment>false</equipment>
|
|
<items>false</items>
|
|
<mounts>false</mounts>
|
|
<inbox>false</inbox>
|
|
<stats>false</stats>
|
|
</common>
|
|
<ios>
|
|
<addTask>false</addTask>
|
|
<editTask>false</editTask>
|
|
<deleteTask>false</deleteTask>
|
|
<filterTask>false</filterTask>
|
|
<groupPets>false</groupPets>
|
|
<inviteParty>false</inviteParty>
|
|
<reorderTask>false</reorderTask>
|
|
</ios>
|
|
</tutorial>
|
|
<customizationsNotification>false</customizationsNotification>
|
|
<showTour>false</showTour>
|
|
<dropsEnabled>false</dropsEnabled>
|
|
<itemsEnabled>false</itemsEnabled>
|
|
<newStuff>false</newStuff>
|
|
<rewrite>true</rewrite>
|
|
<classSelected>false</classSelected>
|
|
<rebirthEnabled>false</rebirthEnabled>
|
|
<recaptureEmailsPhase>0</recaptureEmailsPhase>
|
|
<weeklyRecapEmailsPhase>0</weeklyRecapEmailsPhase>
|
|
<communityGuidelinesAccepted>false</communityGuidelinesAccepted>
|
|
<cronCount>0</cronCount>
|
|
<welcomed>false</welcomed>
|
|
<armoireEnabled>true</armoireEnabled>
|
|
<armoireOpened>false</armoireOpened>
|
|
<armoireEmpty>false</armoireEmpty>
|
|
<cardReceived>false</cardReceived>
|
|
<warnedLowHealth>false</warnedLowHealth>
|
|
<verifiedUsername>true</verifiedUsername>
|
|
<levelDrops/>
|
|
<lastWeeklyRecap>${dateTime}</lastWeeklyRecap>
|
|
</flags>
|
|
<history/>
|
|
<items>
|
|
<gear>
|
|
<equipped>
|
|
<armor>armor_base_0</armor>
|
|
<head>head_base_0</head>
|
|
<shield>shield_base_0</shield>
|
|
</equipped>
|
|
<costume>
|
|
<armor>armor_base_0</armor>
|
|
<head>head_base_0</head>
|
|
<shield>shield_base_0</shield>
|
|
</costume>
|
|
<owned>
|
|
<headAccessory_special_blackHeadband>true</headAccessory_special_blackHeadband>
|
|
<headAccessory_special_blueHeadband>true</headAccessory_special_blueHeadband>
|
|
<headAccessory_special_greenHeadband>true</headAccessory_special_greenHeadband>
|
|
<headAccessory_special_pinkHeadband>true</headAccessory_special_pinkHeadband>
|
|
<headAccessory_special_redHeadband>true</headAccessory_special_redHeadband>
|
|
<headAccessory_special_whiteHeadband>true</headAccessory_special_whiteHeadband>
|
|
<headAccessory_special_yellowHeadband>true</headAccessory_special_yellowHeadband>
|
|
<eyewear_special_blackTopFrame>true</eyewear_special_blackTopFrame>
|
|
<eyewear_special_blueTopFrame>true</eyewear_special_blueTopFrame>
|
|
<eyewear_special_greenTopFrame>true</eyewear_special_greenTopFrame>
|
|
<eyewear_special_pinkTopFrame>true</eyewear_special_pinkTopFrame>
|
|
<eyewear_special_redTopFrame>true</eyewear_special_redTopFrame>
|
|
<eyewear_special_whiteTopFrame>true</eyewear_special_whiteTopFrame>
|
|
<eyewear_special_yellowTopFrame>true</eyewear_special_yellowTopFrame>
|
|
<eyewear_special_blackHalfMoon>true</eyewear_special_blackHalfMoon>
|
|
<eyewear_special_blueHalfMoon>true</eyewear_special_blueHalfMoon>
|
|
<eyewear_special_greenHalfMoon>true</eyewear_special_greenHalfMoon>
|
|
<eyewear_special_pinkHalfMoon>true</eyewear_special_pinkHalfMoon>
|
|
<eyewear_special_redHalfMoon>true</eyewear_special_redHalfMoon>
|
|
<eyewear_special_whiteHalfMoon>true</eyewear_special_whiteHalfMoon>
|
|
<eyewear_special_yellowHalfMoon>true</eyewear_special_yellowHalfMoon>
|
|
</owned>
|
|
</gear>
|
|
<special>
|
|
<snowball>0</snowball>
|
|
<spookySparkles>0</spookySparkles>
|
|
<shinySeed>0</shinySeed>
|
|
<seafoam>0</seafoam>
|
|
<valentine>0</valentine>
|
|
<nye>0</nye>
|
|
<greeting>0</greeting>
|
|
<thankyou>0</thankyou>
|
|
<birthday>0</birthday>
|
|
<congrats>0</congrats>
|
|
<getwell>0</getwell>
|
|
<goodluck>0</goodluck>
|
|
</special>
|
|
<lastDrop>
|
|
<count>0</count>
|
|
<date>${dateTime}</date>
|
|
</lastDrop>
|
|
<pets/>
|
|
<eggs/>
|
|
<hatchingPotions/>
|
|
<food/>
|
|
<mounts/>
|
|
<quests>
|
|
<dustbunnies>1</dustbunnies>
|
|
</quests>
|
|
</items>
|
|
<invitations>
|
|
<party/>
|
|
</invitations>
|
|
<party>
|
|
<quest>
|
|
<progress>
|
|
<up>0</up>
|
|
<down>0</down>
|
|
<collectedItems>0</collectedItems>
|
|
<collect/>
|
|
</progress>
|
|
<RSVPNeeded>false</RSVPNeeded>
|
|
</quest>
|
|
<order>level</order>
|
|
<orderAscending>ascending</orderAscending>
|
|
</party>
|
|
<preferences>
|
|
<hair>
|
|
<color>red</color>
|
|
<base>3</base>
|
|
<bangs>1</bangs>
|
|
<beard>0</beard>
|
|
<mustache>0</mustache>
|
|
<flower>1</flower>
|
|
</hair>
|
|
<emailNotifications>
|
|
<unsubscribeFromAll>false</unsubscribeFromAll>
|
|
<newPM>true</newPM>
|
|
<kickedGroup>true</kickedGroup>
|
|
<wonChallenge>true</wonChallenge>
|
|
<giftedGems>true</giftedGems>
|
|
<giftedSubscription>true</giftedSubscription>
|
|
<invitedParty>true</invitedParty>
|
|
<invitedGuild>true</invitedGuild>
|
|
<questStarted>true</questStarted>
|
|
<invitedQuest>true</invitedQuest>
|
|
<importantAnnouncements>true</importantAnnouncements>
|
|
<weeklyRecaps>true</weeklyRecaps>
|
|
<onboarding>true</onboarding>
|
|
<majorUpdates>true</majorUpdates>
|
|
<subscriptionReminders>true</subscriptionReminders>
|
|
</emailNotifications>
|
|
<pushNotifications>
|
|
<unsubscribeFromAll>false</unsubscribeFromAll>
|
|
<newPM>true</newPM>
|
|
<wonChallenge>true</wonChallenge>
|
|
<giftedGems>true</giftedGems>
|
|
<giftedSubscription>true</giftedSubscription>
|
|
<invitedParty>true</invitedParty>
|
|
<invitedGuild>true</invitedGuild>
|
|
<questStarted>true</questStarted>
|
|
<invitedQuest>true</invitedQuest>
|
|
<majorUpdates>true</majorUpdates>
|
|
<mentionParty>true</mentionParty>
|
|
<mentionJoinedGuild>true</mentionJoinedGuild>
|
|
<mentionUnjoinedGuild>true</mentionUnjoinedGuild>
|
|
<partyActivity>true</partyActivity>
|
|
</pushNotifications>
|
|
<suppressModals>
|
|
<levelUp>false</levelUp>
|
|
<hatchPet>false</hatchPet>
|
|
<raisePet>false</raisePet>
|
|
<streak>false</streak>
|
|
</suppressModals>
|
|
<tasks>
|
|
<groupByChallenge>false</groupByChallenge>
|
|
<confirmScoreNotes>false</confirmScoreNotes>
|
|
</tasks>
|
|
<dayStart>0</dayStart>
|
|
<size>slim</size>
|
|
<hideHeader>false</hideHeader>
|
|
<skin>915533</skin>
|
|
<shirt>blue</shirt>
|
|
<timezoneOffset>0</timezoneOffset>
|
|
<sound>rosstavoTheme</sound>
|
|
<chair>none</chair>
|
|
<allocationMode>flat</allocationMode>
|
|
<autoEquip>true</autoEquip>
|
|
<dateFormat>MM/dd/yyyy</dateFormat>
|
|
<sleep>false</sleep>
|
|
<stickyHeader>true</stickyHeader>
|
|
<disableClasses>false</disableClasses>
|
|
<newTaskEdit>false</newTaskEdit>
|
|
<dailyDueDefaultView>false</dailyDueDefaultView>
|
|
<advancedCollapsed>false</advancedCollapsed>
|
|
<toolbarCollapsed>false</toolbarCollapsed>
|
|
<reverseChatOrder>false</reverseChatOrder>
|
|
<displayInviteToPartyWhenPartyIs1>true</displayInviteToPartyWhenPartyIs1>
|
|
<language>en</language>
|
|
<webhooks/>
|
|
<background>violet</background>
|
|
</preferences>
|
|
<profile>
|
|
<name>${userName}</name>
|
|
</profile>
|
|
<stats>
|
|
<buffs>
|
|
<str>0</str>
|
|
<int>0</int>
|
|
<per>0</per>
|
|
<con>0</con>
|
|
<stealth>0</stealth>
|
|
<streaks>false</streaks>
|
|
<snowball>false</snowball>
|
|
<spookySparkles>false</spookySparkles>
|
|
<shinySeed>false</shinySeed>
|
|
<seafoam>false</seafoam>
|
|
</buffs>
|
|
<training>
|
|
<int>0</int>
|
|
<per>0</per>
|
|
<str>0</str>
|
|
<con>0</con>
|
|
</training>
|
|
<hp>50</hp>
|
|
<mp>10</mp>
|
|
<exp>0</exp>
|
|
<gp>0</gp>
|
|
<lvl>1</lvl>
|
|
<class>warrior</class>
|
|
<points>0</points>
|
|
<str>0</str>
|
|
<con>0</con>
|
|
<int>0</int>
|
|
<per>0</per>
|
|
</stats>
|
|
<inbox>
|
|
<newMessages>0</newMessages>
|
|
<optOut>false</optOut>
|
|
</inbox>
|
|
<tasksOrder>
|
|
<todos>${user.tasksOrder.todos[0]}</todos>
|
|
</tasksOrder>
|
|
<_v>1</_v>
|
|
<balance>0</balance>
|
|
<loginIncentives>0</loginIncentives>
|
|
<invitesSent>0</invitesSent>
|
|
<_id>${userId}</_id>
|
|
<apiToken>${user.apiToken}</apiToken>
|
|
<lastCron>${dateTime}</lastCron>
|
|
<tags>
|
|
<id>${user.tags[0].id}</id>
|
|
<name>Work</name>
|
|
</tags>
|
|
<tags>
|
|
<id>${user.tags[1].id}</id>
|
|
<name>Exercise</name>
|
|
</tags>
|
|
<tags>
|
|
<id>${user.tags[2].id}</id>
|
|
<name>Health + Wellness</name>
|
|
</tags>
|
|
<tags>
|
|
<id>${user.tags[3].id}</id>
|
|
<name>School</name>
|
|
</tags>
|
|
<tags>
|
|
<id>${user.tags[4].id}</id>
|
|
<name>Teams</name>
|
|
</tags>
|
|
<tags>
|
|
<id>${user.tags[5].id}</id>
|
|
<name>Chores</name>
|
|
</tags>
|
|
<tags>
|
|
<id>${user.tags[6].id}</id>
|
|
<name>Creativity</name>
|
|
</tags>
|
|
<extra/>
|
|
<pinnedItems>
|
|
<path>gear.flat.weapon_warrior_0</path>
|
|
<type>marketGear</type>
|
|
</pinnedItems>
|
|
<pinnedItems>
|
|
<path>gear.flat.armor_warrior_1</path>
|
|
<type>marketGear</type>
|
|
</pinnedItems>
|
|
<pinnedItems>
|
|
<path>gear.flat.shield_warrior_1</path>
|
|
<type>marketGear</type>
|
|
</pinnedItems>
|
|
<pinnedItems>
|
|
<path>gear.flat.head_warrior_1</path>
|
|
<type>marketGear</type>
|
|
</pinnedItems>
|
|
<pinnedItems>
|
|
<path>potion</path>
|
|
<type>potion</type>
|
|
</pinnedItems>
|
|
<pinnedItems>
|
|
<path>armoire</path>
|
|
<type>armoire</type>
|
|
</pinnedItems>
|
|
<id>${userId}</id>
|
|
<_tmp>undefined</_tmp>
|
|
<tasks>
|
|
<todos>
|
|
<challenge/>
|
|
<group>
|
|
<approval>
|
|
<required>false</required>
|
|
<approved>false</approved>
|
|
<requested>false</requested>
|
|
</approval>
|
|
<sharedCompletion>singleCompletion</sharedCompletion>
|
|
</group>
|
|
<completed>false</completed>
|
|
<collapseChecklist>false</collapseChecklist>
|
|
<type>todo</type>
|
|
<notes>You can either complete this To Do, edit it, or remove it.</notes>
|
|
<value>0</value>
|
|
<priority>1</priority>
|
|
<attribute>int</attribute>
|
|
<byHabitica>false</byHabitica>
|
|
<createdAt>${dateTime}</createdAt>
|
|
<updatedAt>${dateTime}</updatedAt>
|
|
<_id>${taskId}</_id>
|
|
<text>Join Habitica (Check me off!)</text>
|
|
<userId>${userId}</userId>
|
|
<id>${taskId}</id>
|
|
</todos>
|
|
</tasks>
|
|
</user>`);
|
|
});
|
|
});
|