Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LF-3651 Revenue type table unique violation error on auto-incrementing primary key #2882

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,21 @@ export const up = async function (knex) {
});

// Prepopulate with one revenue type (crop_sale)
await knex('revenue_type').insert({
revenue_type_id: 1,
revenue_name: 'Crop Sale',
farm_id: null,
deleted: false,
created_by_user_id: '1',
updated_by_user_id: '1',
created_at: new Date('2000/1/1').toISOString(),
updated_at: new Date('2000/1/1').toISOString(),
revenue_translation_key: 'CROP_SALE',
});
const [cropSale] = await knex('revenue_type')
.insert({
revenue_name: 'Crop Sale',
farm_id: null,
deleted: false,
created_by_user_id: '1',
updated_by_user_id: '1',
created_at: new Date('2000/1/1').toISOString(),
updated_at: new Date('2000/1/1').toISOString(),
revenue_translation_key: 'CROP_SALE',
})
.returning('revenue_type_id');

// Reference crop_sale type for all existing records
await knex('sale').update({ revenue_type_id: 1 });
await knex('sale').update({ revenue_type_id: cropSale.revenue_type_id });

// Add permissions
await knex('permissions').insert([
Expand Down
6 changes: 5 additions & 1 deletion packages/api/src/middleware/validation/sale.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,16 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details, see <https://www.gnu.org/licenses/>.
*/
import RevenueTypeModel from '../../models/revenueTypeModel.js';

async function validateSale(req, res, next) {
// TODO replace upsertGraph
const { crop_variety_sale, revenue_type_id } = req.body;
// TODO: implement properly once LF-3595 is complete
const isCropRevenue = revenue_type_id === 1;
const cropSaleRevenueType = await RevenueTypeModel.query()
.where('revenue_name', 'Crop Sale')
.first();
const isCropRevenue = revenue_type_id === cropSaleRevenueType.revenue_type_id;
if (isCropRevenue && !(crop_variety_sale && crop_variety_sale[0])) {
return res.status(400).send('crop_variety_sale is required');
}
Expand Down
10 changes: 9 additions & 1 deletion packages/api/tests/sale.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ jest.mock('../src/middleware/acl/checkJwt.js', () =>
import mocks from './mock.factories.js';
import saleModel from '../src/models/saleModel.js';
import cropVarietySaleModel from '../src/models/cropVarietySaleModel.js';
import revenueTypeModel from '../src/models/revenueTypeModel.js';

describe('Sale Tests', () => {
let token;
Expand Down Expand Up @@ -374,11 +375,18 @@ describe('Sale Tests', () => {
let cropVariety2;
let someoneElsecrop;
let someoneElseVariety;
let cropSaleRevenueType;
beforeEach(async () => {
[crop2] = await mocks.cropFactory({ promisedFarm: [farm] });
[cropVariety2] = await mocks.crop_varietyFactory({ promisedCrop: [crop2] });
[someoneElsecrop] = await mocks.cropFactory();
[someoneElseVariety] = await mocks.crop_varietyFactory({ promisedCrop: [someoneElsecrop] });

cropSaleRevenueType = await revenueTypeModel
.query()
.where('revenue_name', 'Crop Sale')
.first();

sampleReqBody = {
...mocks.fakeSale(),
farm_id: farm.farm_id,
Expand All @@ -392,7 +400,7 @@ describe('Sale Tests', () => {
crop_variety_id: cropVariety2.crop_variety_id,
},
],
revenue_type_id: 1,
revenue_type_id: cropSaleRevenueType.revenue_type_id,
};
});

Expand Down