|
13 | 13 | Member, |
14 | 14 | Membership, |
15 | 15 | ReceivableFee, |
| 16 | + ReceivableFeeTransactionMatchRule, |
16 | 17 | ) |
17 | 18 |
|
18 | 19 |
|
@@ -149,3 +150,115 @@ def test_when_membership_is_activated_add_first_receivable_fee(db): |
149 | 150 |
|
150 | 151 | assert membership.receivable_fees.exists() |
151 | 152 | assert membership.receivable_fees.count() == 1 |
| 153 | + |
| 154 | + |
| 155 | +@pytest.mark.parametrize( |
| 156 | + "cpf,expected_patterns", |
| 157 | + [ |
| 158 | + ("123.456.789-10", (".*123.456.789-10.*", ".*12345678910.*")), |
| 159 | + ("12345678910", (".*123.456.789-10.*", ".*12345678910.*")), |
| 160 | + ], |
| 161 | +) |
| 162 | +def test_when_membership_is_created_add_receivable_fee_match_rule_with_their_cpf( |
| 163 | + db, cpf, expected_patterns |
| 164 | +): |
| 165 | + """Some transactions contains the CPF of the member, so this is the simplest rule to match a receivable fee payment""" |
| 166 | + member = baker.make(Member, cpf=cpf) |
| 167 | + |
| 168 | + membership = Membership.objects.create( |
| 169 | + member=member, |
| 170 | + start_date=date(2025, 8, 11), |
| 171 | + membership_fee_amount=Decimal("85"), |
| 172 | + payment_interval=FeeIntervals.MONTHLY, |
| 173 | + active=False, |
| 174 | + ) |
| 175 | + |
| 176 | + assert ( |
| 177 | + ReceivableFeeTransactionMatchRule.objects.filter(membership=membership).count() |
| 178 | + == 2 |
| 179 | + ) |
| 180 | + for expected_pattern in expected_patterns: |
| 181 | + assert ReceivableFeeTransactionMatchRule.objects.filter( |
| 182 | + membership=membership, pattern=expected_pattern |
| 183 | + ).exists() |
| 184 | + |
| 185 | + |
| 186 | +def test_when_membership_is_created_do_not_add_receivable_fee_match_rule_with_member_without_cpf( |
| 187 | + db, |
| 188 | +): |
| 189 | + """Some transactions contains the CPF of the member, so this is the simplest rule to match a receivable fee payment""" |
| 190 | + member = baker.make(Member, cpf="") |
| 191 | + |
| 192 | + membership = Membership.objects.create( |
| 193 | + member=member, |
| 194 | + start_date=date(2025, 8, 11), |
| 195 | + membership_fee_amount=Decimal("85"), |
| 196 | + payment_interval=FeeIntervals.MONTHLY, |
| 197 | + active=False, |
| 198 | + ) |
| 199 | + |
| 200 | + assert ( |
| 201 | + ReceivableFeeTransactionMatchRule.objects.filter(membership=membership).count() |
| 202 | + == 0 |
| 203 | + ) |
| 204 | + |
| 205 | + |
| 206 | +def test_when_membership_do_not_add_duplicated_receivable_fee_match_rule_if_already_exists( |
| 207 | + db, |
| 208 | +): |
| 209 | + """Some transactions contains the CPF of the member, so this is the simplest rule to match a receivable fee payment""" |
| 210 | + member = baker.make(Member, cpf="123.456.789-10") |
| 211 | + |
| 212 | + membership = Membership.objects.create( |
| 213 | + member=member, |
| 214 | + start_date=date(2025, 8, 11), |
| 215 | + membership_fee_amount=Decimal("85"), |
| 216 | + payment_interval=FeeIntervals.MONTHLY, |
| 217 | + active=False, |
| 218 | + ) |
| 219 | + assert ( |
| 220 | + ReceivableFeeTransactionMatchRule.objects.filter(membership=membership).count() |
| 221 | + == 2 |
| 222 | + ) |
| 223 | + |
| 224 | + membership.membership_fee_amount = Decimal("110") |
| 225 | + membership.save() |
| 226 | + |
| 227 | + assert ( |
| 228 | + ReceivableFeeTransactionMatchRule.objects.filter(membership=membership).count() |
| 229 | + == 2 |
| 230 | + ) |
| 231 | + |
| 232 | + |
| 233 | +def test_keep_existing_receivable_fee_match_rule_that_exist(db): |
| 234 | + """Some transactions contains the CPF of the member, so this is the simplest rule to match a receivable fee payment""" |
| 235 | + member = baker.make(Member, cpf="") |
| 236 | + membership = Membership.objects.create( |
| 237 | + member=member, |
| 238 | + start_date=date(2025, 8, 11), |
| 239 | + membership_fee_amount=Decimal("85"), |
| 240 | + payment_interval=FeeIntervals.MONTHLY, |
| 241 | + active=False, |
| 242 | + ) |
| 243 | + ReceivableFeeTransactionMatchRule.objects.create( |
| 244 | + membership=membership, pattern=".*Member name.*" |
| 245 | + ) |
| 246 | + |
| 247 | + member.cpf = "123.456.789-10" |
| 248 | + member.save() |
| 249 | + |
| 250 | + membership.save() |
| 251 | + |
| 252 | + assert ( |
| 253 | + ReceivableFeeTransactionMatchRule.objects.filter(membership=membership).count() |
| 254 | + == 3 |
| 255 | + ) |
| 256 | + assert ReceivableFeeTransactionMatchRule.objects.filter( |
| 257 | + membership=membership, pattern=".*Member name.*" |
| 258 | + ).exists() |
| 259 | + assert ReceivableFeeTransactionMatchRule.objects.filter( |
| 260 | + membership=membership, pattern=".*12345678910.*" |
| 261 | + ).exists() |
| 262 | + assert ReceivableFeeTransactionMatchRule.objects.filter( |
| 263 | + membership=membership, pattern=".*123.456.789-10.*" |
| 264 | + ).exists() |
0 commit comments