diff --git a/back/src/companies/repository/company/create.ts b/back/src/companies/repository/company/create.ts index 86fb6e9b1e..a60157347b 100644 --- a/back/src/companies/repository/company/create.ts +++ b/back/src/companies/repository/company/create.ts @@ -10,9 +10,6 @@ export type CreateCompanyFn = ( logMetadata?: LogMetadata ) => Promise; -// TODO: anonymous Company -// TODO: batch creation - export const buildCreateCompany = (deps: RepositoryFnDeps): CreateCompanyFn => { return async data => { const { prisma } = deps; diff --git a/back/src/users/bulk-creation/__tests__/bulk-create.integration.ts b/back/src/users/bulk-creation/__tests__/bulk-create.integration.ts index 6b65211a25..aba5205e86 100644 --- a/back/src/users/bulk-creation/__tests__/bulk-create.integration.ts +++ b/back/src/users/bulk-creation/__tests__/bulk-create.integration.ts @@ -38,7 +38,7 @@ describe("bulk create users and companies from csv files", () => { jest.mock("../../../companies/search"); (searchCompany as jest.Mock) .mockResolvedValue({ - siret: "85001946400013", + siret: "85001946400021", name: "Code en stock", statutDiffusionEtablissement: "O", etatAdministratif: "A" @@ -54,7 +54,7 @@ describe("bulk create users and companies from csv files", () => { // In the test data we have // // 2 companies: - // - Code en Stock 85001946400013 + // - Code en Stock 85001946400021 // - Frontier SAS 81343950200028 // // and 3 users @@ -115,7 +115,7 @@ describe("bulk create users and companies from csv files", () => { // check fields are OK for first company const codeEnStock = await prisma.company.findUniqueOrThrow({ - where: { siret: "85001946400013" } + where: { siret: "85001946400021" } }); expect(codeEnStock.name).toEqual("NAME FROM SIRENE"); expect(codeEnStock.givenName).toEqual("Code en Stock"); @@ -145,7 +145,7 @@ describe("bulk create users and companies from csv files", () => { test("already existing company", async () => { // assume Code en Stock was already created - const codeEnStock = await companyFactory({ siret: "85001946400013" }); + const codeEnStock = await companyFactory({ siret: "85001946400021" }); await bulkCreateIdempotent(); @@ -153,7 +153,7 @@ describe("bulk create users and companies from csv files", () => { // Code en stock should be untouched expect( - await prisma.company.findUnique({ where: { siret: "85001946400013" } }) + await prisma.company.findUnique({ where: { siret: "85001946400021" } }) ).toEqual(codeEnStock); }, 10000); @@ -181,7 +181,7 @@ describe("bulk create users and companies from csv files", () => { // associations should exist between John Snow and Code en Stock const associations = await prisma.companyAssociation.findMany({ - where: { user: { id: john.id }, company: { siret: "85001946400013" } } + where: { user: { id: john.id }, company: { siret: "85001946400021" } } }); expect(associations).toHaveLength(1); expect(associations[0].role).toEqual("ADMIN"); @@ -190,7 +190,7 @@ describe("bulk create users and companies from csv files", () => { test("already existing user with existing role in company", async () => { // John Snow and Code en Stock already exist const john = await userFactory({ email: "john.snow@trackdechets.fr" }); - const codeEnStock = await companyFactory({ siret: "85001946400013" }); + const codeEnStock = await companyFactory({ siret: "85001946400021" }); // and John Snow is member of Code en Stock const role = await prisma.companyAssociation.create({ data: { @@ -260,7 +260,7 @@ describe("bulk create users and companies from csv files", () => { test("role in csv already in pending invitation", async () => { // assume John Snow was already invited to Trackdéchets - const company = await companyFactory({ siret: "85001946400013" }); + const company = await companyFactory({ siret: "85001946400021" }); const invitation = await prisma.userAccountHash.create({ data: { email: "john.snow@trackdechets.fr", @@ -292,4 +292,28 @@ describe("bulk create users and companies from csv files", () => { }); expect(updatedInvitation.acceptedAt).not.toBeNull(); }, 10000); + + test("should fill company's splitted address", async () => { + await bulkCreateIdempotent(); + + await expectNumberOfRecords(2, 3, 4); + + // check fields are OK for first user + const john = await prisma.user.findUniqueOrThrow({ + where: { email: "john.snow@trackdechets.fr" } + }); + expect(john.name).toEqual("john.snow@trackdechets.fr"); + expect(john.isActive).toEqual(true); + expect(john.activatedAt).toBeTruthy(); + expect(john.firstAssociationDate).toBeTruthy(); + + // check fields are OK for first company + const codeEnStock = await prisma.company.findUniqueOrThrow({ + where: { siret: "85001946400021" } + }); + expect(codeEnStock.street).toEqual("40 BOULEVARD VOLTAIRE BAT G"); + expect(codeEnStock.postalCode).toEqual("13001"); + expect(codeEnStock.city).toEqual("MARSEILLE"); + expect(codeEnStock.country).toEqual("FR"); + }, 10000); }); diff --git a/back/src/users/bulk-creation/__tests__/csv/etablissements.csv b/back/src/users/bulk-creation/__tests__/csv/etablissements.csv index 13a61c2e10..e33b0a6707 100644 --- a/back/src/users/bulk-creation/__tests__/csv/etablissements.csv +++ b/back/src/users/bulk-creation/__tests__/csv/etablissements.csv @@ -1,3 +1,3 @@ "siret";"gerepId";"companyTypes";"collectorTypes";"wasteProcessorTypes";"wasteVehiclesTypes";"givenName";"contactEmail";"contactPhone";"contact";"website" -"85001946400013";"1234";"PRODUCER";;;;"Code en Stock";"codeenstock@trackdechets.fr";"0600000000";"Marcel Machin";"https://codeenstock.trackdechets.fr" +"85001946400021";"1234";"PRODUCER";;;;"Code en Stock";"codeenstock@trackdechets.fr";"0600000000";"Marcel Machin";"https://codeenstock.trackdechets.fr" "81343950200028";"2345";"PRODUCER,WASTEPROCESSOR";;"OTHER_DANGEROUS_WASTES";;"Frontier SAS";"frontier@trackdechets.fr";"0700000000";;"https://frontier.trackdechets.fr" diff --git a/back/src/users/bulk-creation/__tests__/csv/roles.csv b/back/src/users/bulk-creation/__tests__/csv/roles.csv index 8e079fee6d..4d0b7faa9e 100644 --- a/back/src/users/bulk-creation/__tests__/csv/roles.csv +++ b/back/src/users/bulk-creation/__tests__/csv/roles.csv @@ -1,5 +1,5 @@ "siret";"email";"role" -"85001946400013";"john.snow@trackdechets.fr";"ADMIN" +"85001946400021";"john.snow@trackdechets.fr";"ADMIN" "81343950200028";"arya.stark@trackdechets.fr";"ADMIN" -"85001946400013";"tyrion.lannister@trackdechets.fr";"MEMBER" +"85001946400021";"tyrion.lannister@trackdechets.fr";"MEMBER" "81343950200028";"tyrion.lannister@trackdechets.fr";"MEMBER" \ No newline at end of file diff --git a/back/src/users/bulk-creation/index.ts b/back/src/users/bulk-creation/index.ts index ae3e9d1792..6b3acbb5c4 100644 --- a/back/src/users/bulk-creation/index.ts +++ b/back/src/users/bulk-creation/index.ts @@ -23,6 +23,7 @@ import { } from "@prisma/client"; import { CompanyInfo, CompanyRow, RoleRow } from "./types"; import { UserInputError } from "../../common/errors"; +import { getCompanyRepository } from "../../companies/repository"; function printHelp() { console.log(` @@ -82,7 +83,6 @@ export async function bulkCreate(opts: Opts): Promise { // perform validation for (const company of companiesRows) { - console.info(`Validate company ${company.siret}`); try { const validCompany = await companyValidationSchema.validate(company); companies.push(validCompany); @@ -158,40 +158,43 @@ export async function bulkCreate(opts: Opts): Promise { }); if (!existingCompany) { console.info(`Create company ${company.siret}`); - await prisma.company.create({ - data: { - orgId: company.siret, - siret: company.siret, - verificationStatus: CompanyVerificationStatus.VERIFIED, - verificationMode: CompanyVerificationMode.MANUAL, - verifiedAt: new Date(), - verificationComment: "Import en masse", - codeNaf: company.codeNaf, - gerepId: company.gerepId, - name: company.name!, - companyTypes: { - set: company.companyTypes as CompanyType[] - }, - collectorTypes: { - set: company.collectorTypes as CollectorType[] - }, - wasteProcessorTypes: { - set: company.wasteProcessorTypes as WasteProcessorType[] - }, - wasteVehiclesTypes: { - set: company.wasteVehiclesTypes as WasteVehiclesType[] - }, - securityCode: randomNumber(4), - givenName: company.givenName, - contactEmail: company.contactEmail, - contactPhone: company.contactPhone, - contact: company.contact, - website: company.website, - verificationCode: randomNumber(5).toString(), - address: company.address, - latitude: company.latitude, - longitude: company.longitude - } + + const { createCompany } = await getCompanyRepository({ + id: "support_tech" + } as Express.User); + + await createCompany({ + orgId: company.siret, + siret: company.siret, + verificationStatus: CompanyVerificationStatus.VERIFIED, + verificationMode: CompanyVerificationMode.MANUAL, + verifiedAt: new Date(), + verificationComment: "Import en masse", + codeNaf: company.codeNaf, + gerepId: company.gerepId, + name: company.name!, + companyTypes: { + set: company.companyTypes as CompanyType[] + }, + collectorTypes: { + set: company.collectorTypes as CollectorType[] + }, + wasteProcessorTypes: { + set: company.wasteProcessorTypes as WasteProcessorType[] + }, + wasteVehiclesTypes: { + set: company.wasteVehiclesTypes as WasteVehiclesType[] + }, + securityCode: randomNumber(4), + givenName: company.givenName, + contactEmail: company.contactEmail, + contactPhone: company.contactPhone, + contact: company.contact, + website: company.website, + verificationCode: randomNumber(5).toString(), + address: company.address, + latitude: company.latitude, + longitude: company.longitude }); } }