from datetime import timedelta from odoo import fields from odoo.exceptions import ValidationError from odoo.tests.common import TransactionCase, tagged @tagged('post_install', '-at_install') class TestClassifieds(TransactionCase): def setUp(self): super().setUp() self.poster = self.env['res.partner'].create({'name': 'Classified Poster'}) def test_new_listing_is_pending_review(self): listing = self.env['community.classified'].create({ 'title': 'Old Bicycle', 'poster_partner_id': self.poster.id, }) self.assertEqual(listing.state, 'pending_review') self.assertTrue(listing.expiry_date) def test_publish_makes_listing_visible(self): listing = self.env['community.classified'].create({ 'title': 'Piano Lessons', 'poster_partner_id': self.poster.id, }) listing.action_publish() self.assertEqual(listing.state, 'published') visible = self.env['community.classified'].search([('state', '=', 'published')]) self.assertIn(listing, visible) def test_reject_listing(self): listing = self.env['community.classified'].create({ 'title': 'Spam Listing', 'poster_partner_id': self.poster.id, }) listing.action_reject() self.assertEqual(listing.state, 'rejected') def test_expiry_cron_archives_past_due_listings(self): listing = self.env['community.classified'].create({ 'title': 'Expiring Soon', 'poster_partner_id': self.poster.id, }) listing.action_publish() listing.expiry_date = fields.Date.today() - timedelta(days=1) self.env['community.classified']._cron_expire_listings() self.assertEqual(listing.state, 'expired') def test_renew_resets_expiry_and_republishes(self): listing = self.env['community.classified'].create({ 'title': 'Renew Me', 'poster_partner_id': self.poster.id, }) listing.action_publish() listing.expiry_date = fields.Date.today() - timedelta(days=1) self.env['community.classified']._cron_expire_listings() self.assertEqual(listing.state, 'expired') listing.action_renew() self.assertEqual(listing.state, 'published') self.assertGreater(listing.expiry_date, fields.Date.today()) def test_max_three_images(self): listing = self.env['community.classified'].create({ 'title': 'Many Photos', 'poster_partner_id': self.poster.id, }) tiny_png = b'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=' with self.assertRaises(ValidationError): listing.write({ 'image_ids': [(0, 0, {'image': tiny_png}) for _ in range(4)], }) def test_configurable_expiry_days(self): self.env['ir.config_parameter'].sudo().set_param('community_classifieds.expiry_days', '5') listing = self.env['community.classified'].create({ 'title': 'Short Lived', 'poster_partner_id': self.poster.id, }) expected = fields.Date.today() + timedelta(days=5) self.assertEqual(listing.expiry_date, expected)