Faits :
A.
A._ a été employée par B._ AG. Après avoir travaillé pour cet établissement bancaire du 1 er décembre 1986 au 31 juillet 1999, l'employée y a repris ses activités professionnelles dès le 1 er octobre 2003 en qualité de conseillère à la clientèle.
En 2010, la banque a adopté une politique de certification ISO ayant pour conséquence que tout employé en contact avec la clientèle devait passer une certification destinée à s'assurer qu'il dispose des compétences nécessaires pour assurer un service de qualité à la clientèle.
L'employée a échoué une première fois à l'examen écrit, le 30 mars 2011, puis une seconde fois le 27 avril 2012. Sur proposition de la banque, elle s'est présentée une troisième fois à cet examen, le 7 décembre 2012, sans plus de réussite.
L'employée s'est trouvée en incapacité de travail à 40 % du 3 au 10 octobre 2012, à 100 % du 11 au 16 octobre 2012, et à 40 % du 17 octobre au 7 décembre 2012.
Malgré l'intervention de son médecin, le 8 décembre 2012, lequel a expliqué à l'employeuse que sa patiente présentait depuis plusieurs semaines une incapacité partielle en lien direct avec une surcharge professionnelle due à la préparation et au passage de cet examen de certification, la banque a considéré que l'employée avait subi un triple échec.
L'incapacité de travail de l'employée a été intégrale du 8 décembre 2012 jusqu'à fin novembre 2013. Elle a repris son travail à 40 % en décembre 2013, a traversé une période de réinsertion professionnelle à compter de janvier 2014, avant de reprendre son activité professionnelle à 100 % dès le 1 er avril 2015.
La banque lui a alors donné, à titre exceptionnel, la possibilité de passer une quatrième fois ses examens en juillet 2015. L'employée a été soutenue dans sa préparation par sa hiérarchie et son équipe; ses collègues se sont mêmes relayés pour l'aider à réviser. Malgré tous ces efforts, elle a derechef échoué à cet examen.
L'employée s'est alors adressée à son responsable des ressources humaines pour lui demander un soutien au replacement dès lors qu'elle savait la résiliation de son contrat inéluctable. L'intéressé l'a rencontrée deux jours après et, devant ses inquiétudes, lui a proposé de l'aider à trouver du travail à l'interne comme à l'externe.
Le 8 septembre 2015, l'employée a été convoquée à une séance lors de laquelle une convention de résiliation des rapports de travail lui a été soumise. Celle-ci n'a pas obtenu l'aval de l'employée, qui a été prise de vomissements et a absorbé un calmant fourni par sa responsable hiérarchique. Il a alors été mis un terme à la séance. L'employée a été raccompagnée à sa voiture par l'une des participantes qui, à sa demande, est également allée récupérer ses affaires à sa place de travail. Tous les accès lui ont ce jour-là été retirés, ce qui correspondait à la pratique de la banque.
Par courrier du 14 septembre 2015, le conseil de l'employée a informé la banque que sa mandante contestait toute résiliation et demeurait à sa disposition pour exécuter son travail. Par lettre du 9 octobre 2015, la banque a expliqué qu'elle n'avait eu d'autre choix que de mettre fin aux rapports de travail et qu'elle avait libéré l'employée de son obligation de travailler. Elle a indiqué que l'offre qu'elle avait formulée dans la convention de départ pouvait encore être acceptée jusqu'au 19 octobre 2015. L'employée n'y a pas donné suite.
Par pli recommandé du 20 novembre 2015, la banque a mis fin aux rapports de travail avec effet au 29 février 2016. L'employée y a fait opposition.
Le 18 février 2016, la banque a délivré à l'employée un certificat de travail, auquel celle-ci n'a pas intégralement souscrit.
B.
B.a. Au bénéfice d'une autorisation de procéder, l'employée a déposé une demande, le 29 novembre 2016, par laquelle elle a conclu à ce que l'employeuse lui verse 40'500 fr. à titre d'indemnité pour résiliation abusive (<ref-law>), 3'000 fr. à titre de tort moral et 291 fr. en remboursement d'une paire de lunettes médicales. Elle a également requis la délivrance d'un certificat de travail modifié selon ses indications.
Par jugement du 20 juin 2018, le Tribunal civil de l'arrondissement de Lausanne a rejeté ses conclusions. La résiliation reposait sur le fait que l'employée avait échoué définitivement à l'examen de certification, ce qui ne lui permettait pas de poursuivre son activité de conseillère au front desk. Un tel congé n'était pas abusif. Quant à l'indemnité pour tort moral, l'employée avait échoué à établir l'existence d'un environnement hostile qui aurait engendré chez elle un sentiment d'isolement et de stress. Les lunettes dont elle réclamait le remboursement lui avaient été restituées. Enfin, s'agissant des précisions qu'elle aurait souhaité faire apporter au certificat de travail, elles ne constituaient que des rectifications de plume, de libellé et de forme et ne présentaient aucune utilité, dès lors qu'il s'agissait d'un certificat détaillé permettant de se faire une idée complète du rôle de l'intéressée dans la banque.
B.b. Statuant le 21 mai 2019 sur appel de l'employée, le Tribunal cantonal vaudois a confirmé le jugement de première instance. Ses motifs seront évoqués dans les considérants du présent arrêt.
C.
L'employée a interjeté un recours en matière civile en reprenant les conclusions de sa demande.
La cour cantonale s'est référée à son arrêt. Dans sa réponse, l'employeuse a conclu au rejet du recours, dans la mesure de sa recevabilité. L'employée a déposé une réplique spontanée qui n'a pas suscité le dépôt d'une duplique.

Considérant en droit :
1.
Les conditions de recevabilité du recours en matière civile sont réalisées sur le principe, notamment sous l'angle de la valeur litigieuse minimale de 15'000 fr. (<ref-law>) et du délai pour recourir (<ref-law>). Demeure réservé l'examen des griefs particuliers.
2.
2.1. Le recours en matière civile peut être exercé pour violation du droit fédéral (<ref-law>), y compris le droit constitutionnel (<ref-ruling> consid. 2.4 p. 313). Le Tribunal fédéral applique le droit d'office (<ref-law>). Compte tenu de l'exigence de motivation contenue à l'art. 42 al. 1 et 2 LTF, sous peine d'irrecevabilité (<ref-law>), le Tribunal fédéral n'examine en principe que les griefs invoqués, sauf en cas d'erreurs juridiques manifestes. Il n'est pas tenu de traiter, comme le ferait une autorité de première instance, toutes les questions juridiques qui se posent, lorsque celles-ci ne sont plus discutées devant lui (<ref-ruling> consid. 2; <ref-ruling> consid. 2). Par exception à la règle selon laquelle il applique le droit d'office, il n'examine la violation d'un droit constitutionnel que si le grief a été invoqué et motivé de façon détaillée (<ref-law>; <ref-ruling> consid. 1.4 in fine).
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>). Il ne peut rectifier ou compléter les constatations de l'autorité précédente que si elles sont manifestement inexactes ou découlent d'une violation du droit au sens de l'<ref-law> (<ref-law>). "Manifestement inexactes" signifie ici "arbitraires" (ATF <ref-ruling> consid. 2 p. 117; <ref-ruling> consid. 1.5). Encore faut-il que la correction du vice soit susceptible d'influer sur le sort de la cause (<ref-law>) La critique de l'état de fait retenu est soumise au principe strict de l'allégation énoncé par l'<ref-law> (<ref-ruling> consid. 2.3 p. 266 et les références).
La partie qui entend attaquer les faits constatés par l'autorité précédente doit expliquer clairement et de manière circonstanciée en quoi ces conditions seraient réalisées (<ref-ruling> consid. 1.3.1 p. 18 et les références). Si elle souhaite obtenir un complètement de l'état de fait, elle doit aussi démontrer, par des renvois précis aux pièces du dossier, qu'elle a présenté aux autorités précédentes en conformité avec les règles de procédure les faits juridiquement pertinents à cet égard et les moyens de preuve adéquats (<ref-ruling> consid. 2 p. 90). Si la critique ne satisfait pas à ces exigences, les allégations relatives à un état de fait qui s'écarterait de celui de la décision attaquée ne pourront pas être prises en considération (<ref-ruling> consid. 1.3.1 p. 18). Aucun fait nouveau ni preuve nouvelle ne peut être présenté à moins de résulter de la décision de l'autorité précédente (<ref-law>).
3.
Il est constant que les parties ont été liées par un contrat de travail de durée indéterminée auquel l'employeuse a mis fin le 20 novembre 2015 pour le 29 février 2016. Le litige tient en trois points.
3.1. Tout d'abord, la recourante prétend que la cour cantonale aurait méconnu le caractère abusif de la résiliation, violant par là même l'<ref-law>. Selon elle, le véritable motif de son congé résidait dans la volonté de se séparer d'une employée fragile. Le point de savoir pour quel motif l'employeuse a réellement résilié le contrat de travail est question de fait (<ref-ruling> consid. 2.3 in fine p. 515).
Selon le jugement cantonal qui fait foi sur ce point (cf. supra consid. 2.2), l'employeuse s'est résolue à licencier l'employée en raison de son quatrième échec aux examens écrits qui s'inscrivaient dans le processus de certification ISO. Ce processus n'était pas un prétexte qui aurait été utilisé pour pouvoir se séparer de certains employés; l'employée n'alléguait aucun élément de fait dans ce sens.
Dans son recours, la recourante ne fait pas valoir que la cour cantonale aurait en cela versé dans l'arbitraire. Tout au plus explique-t-elle que le fait de lui imposer des examens internes destinés à s'assurer qu'elle disposait des compétences nécessaires lésait ses droits de la personnalité. Elle fonde apparemment son argument sur son âge et l'expérience qu'elle avait accumulée au fil des années passées au service de la banque. De là à affirmer que cette expérience lui conférait les compétences requises, il n'y a qu'un pas que la recourante ne se risque pas à franchir, vu le quadruple échec subi. Le fil de son raisonnement s'avère difficile à dénouer. S'il fallait juger du caractère abusif du congé à l'aune des souffrances psychiques qu'elle affirme avoir traversées du fait de l'obligation de repasser des examens, l'on pourrait certes abonder dans son sens. Ceci marquerait toutefois la fin de tout processus de certification, ce qui n'est guère sérieux. La démarche dans laquelle l'employeuse s'est engagée est parfaitement compréhensible. Elle n'a rien de discriminant ni d'humiliant, contrairement à ce que prétend la recourante sans éléments précis à l'appui. L'on ne peut qu'en conclure, avec la cour cantonale, que le motif du congé n'avait rien d'abusif.
La recourante affirme encore que la manière dont l'intimée l'a licenciée relevait de l'abus de droit. Elle soutient avoir été victime de vexations dont la nature demeure toutefois un mystère. Il n'en sera pas tenu compte. Elle allègue également avoir reçu des assurances contradictoires selon lesquelles elle conserverait son poste, avoir été privée de la possibilité de prendre congé de ses collègues et de récupérer ses effets personnels. Aucun de ces éléments ne ressort de l'arrêt attaqué, qui lie en cela le Tribunal fédéral.
Il s'ensuit le rejet du grief de la recourante.
3.2. La recourante estime ensuite que la cour cantonale a versé dans l'arbitraire en méconnaissant la date de la facture d'achat de ses lunettes médicales, correspondant au 28 février 2015 et non au 28 février 2016. Le raisonnement de la cour cantonale aurait été perverti par cette constatation manifestement inexacte, ce qui l'a amenée à lui dénier le droit au remboursement de ses lunettes de remplacement (291 fr.).
Il ressort de l'arrêt attaqué que les lunettes de la recourante n'ont pas été trouvées à l'issue de l'entrevue du 8 septembre 2015 par la personne qu'elle avait chargée de lui apporter ses effets personnels et qu'elles lui ont été envoyées le 10 novembre 2015. L'état de fait précise ensuite que "[s]elon une facture établie le 28 février 2015 (...), la demanderesse a commandé une nouvelle paire de lunettes médicales pour un montant de 291 francs". Dans les considérants en droit, les juges cantonaux constatent toutefois que la "facture de remplacement desdites lunettes datant du 28 février 2016", soit trois mois après la restitution, on ne voit pas pour quel motif elle serait imputable à l'employeuse. En réalité, la facture en question est bel et bien datée du 28 février 2015; il s'agit, selon les premiers juges, de la facture d'achat des lunettes qui ont été restituées par l'employeuse, et non celle d'achat de lunettes de substitution. Sans autres explications de la recourante, qui ne précise pas quels faits ont été régulièrement allégués et quels autres moyens de preuves ont été éventuellement proposés, cette pièce à elle seule ne saurait être déterminante.
3.3. Finalement, la recourante fait valoir que la cour cantonale aurait dû, sous peine de violer l'<ref-law>, reconnaître la justesse des modifications qu'elle entendait faire apporter au certificat de travail délivré par l'employeuse.
L'argumentation doit présenter un lien avec la décision attaquée; le recourant ne saurait reprendre mot pour mot les motifs invoqués devant l'autorité précédente, en s'abstenant d'expliquer pour quelle raison cette autorité enfreint le droit fédéral (<ref-ruling> consid. 2.3). En l'occurrence, la recourante ne discute pas les motifs sur lesquels la cour cantonale s'est fondée pour écarter les correctifs qu'elle demandait. Son argumentation s'avère dès lors irrecevable.
4.
Partant, le recours s'avère intégralement mal fondé et doit être rejeté dans la mesure où il est recevable. La recourante supportera les frais judiciaires, fixés à 2'000 fr., et versera à son adverse partie une indemnité de 2'500 fr. à titre de dépens (art. 66 et art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
Les frais judiciaires, fixés à 2'000 fr., sont mis à la charge de la recourante.
3.
La recourante versera à l'intimée une indemnité de 2'500 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux parties et au Tribunal cantonal du canton de Vaud.
Lausanne, le 28 février 2020
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La présidente: Kiss
La greffière: Monti