test: fix when using timestamps not yet limited by postgresql precision
Sur des colonnes dont le schema ne connait pas le niveau de précision (créées avant rails 7), rails créé un timestamp avec la précision système (par exemple 9 décimales sur linux) alors que pg va l'arrondir a posteriori à 6. Ce n'est généralement pas un problème en production, mais se révèle dans les tests typiquement avec des objets crées par des factories: si un test dépend de ces timestamps, il faut récupérer la valeur limitée par pg (d'où le reload), plutôt que celle directement issue de Time.now à la création de l'objet. Une alternative aurait été de créer une migration pour ces colonnes pour forcer la précision à 6 et que le schema en aurait pris connaissance: rails limiterait la précision de lui même dès la création de l'objet.
This commit is contained in:
parent
e60a5f5123
commit
f972d36f2f
2 changed files with 5 additions and 4 deletions
|
@ -160,7 +160,7 @@ describe API::V2::GraphqlController do
|
||||||
|
|
||||||
context 'include Dossiers' do
|
context 'include Dossiers' do
|
||||||
def cursor_for(item, column)
|
def cursor_for(item, column)
|
||||||
cursor = [item.read_attribute(column).utc.strftime("%Y-%m-%dT%H:%M:%S.%NZ"), item.id].join(';')
|
cursor = [item.reload.read_attribute(column).utc.strftime("%Y-%m-%dT%H:%M:%S.%NZ"), item.id].join(';')
|
||||||
API::V2::Schema.cursor_encoder.encode(cursor, nonce: true)
|
API::V2::Schema.cursor_encoder.encode(cursor, nonce: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -456,7 +456,7 @@ describe API::V2::GraphqlController do
|
||||||
|
|
||||||
context 'include deleted Dossiers' do
|
context 'include deleted Dossiers' do
|
||||||
def cursor_for(item)
|
def cursor_for(item)
|
||||||
cursor = [item.deleted_at.utc.strftime("%Y-%m-%dT%H:%M:%S.%NZ"), item.id].join(';')
|
cursor = [item.reload.deleted_at.utc.strftime("%Y-%m-%dT%H:%M:%S.%NZ"), item.id].join(';')
|
||||||
API::V2::Schema.cursor_encoder.encode(cursor, nonce: true)
|
API::V2::Schema.cursor_encoder.encode(cursor, nonce: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -575,7 +575,7 @@ describe API::V2::GraphqlController do
|
||||||
|
|
||||||
context 'include pending deleted Dossiers' do
|
context 'include pending deleted Dossiers' do
|
||||||
def cursor_for(item)
|
def cursor_for(item)
|
||||||
cursor = [(item.en_construction? ? item.hidden_by_user_at : item.hidden_by_administration_at).utc.strftime("%Y-%m-%dT%H:%M:%S.%NZ"), item.id].join(';')
|
cursor = [(item.reload.en_construction? ? item.hidden_by_user_at : item.hidden_by_administration_at).utc.strftime("%Y-%m-%dT%H:%M:%S.%NZ"), item.id].join(';')
|
||||||
API::V2::Schema.cursor_encoder.encode(cursor, nonce: true)
|
API::V2::Schema.cursor_encoder.encode(cursor, nonce: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -173,6 +173,7 @@ RSpec.describe DossierCloneConcern do
|
||||||
|
|
||||||
context "as a fork" do
|
context "as a fork" do
|
||||||
let(:new_dossier) { dossier.clone(fork: true) }
|
let(:new_dossier) { dossier.clone(fork: true) }
|
||||||
|
before { dossier.champs_public.reload } # we compare timestamps so we have to get the precision limit from the db }
|
||||||
|
|
||||||
it { expect(new_dossier.editing_fork_origin).to eq(dossier) }
|
it { expect(new_dossier.editing_fork_origin).to eq(dossier) }
|
||||||
it { expect(new_dossier.champs_public[0].id).not_to eq(dossier.champs_public[0].id) }
|
it { expect(new_dossier.champs_public[0].id).not_to eq(dossier.champs_public[0].id) }
|
||||||
|
@ -181,7 +182,7 @@ RSpec.describe DossierCloneConcern do
|
||||||
|
|
||||||
context "piece justificative champ" do
|
context "piece justificative champ" do
|
||||||
let(:champ_pj) { create(:champ_piece_justificative, dossier_id: dossier.id) }
|
let(:champ_pj) { create(:champ_piece_justificative, dossier_id: dossier.id) }
|
||||||
before { dossier.champs_public << champ_pj }
|
before { dossier.champs_public << champ_pj.reload }
|
||||||
|
|
||||||
it {
|
it {
|
||||||
champ_pj_fork = Champs::PieceJustificativeChamp.where(dossier: new_dossier).first
|
champ_pj_fork = Champs::PieceJustificativeChamp.where(dossier: new_dossier).first
|
||||||
|
|
Loading…
Reference in a new issue