Skip to content
Open
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
4 changes: 2 additions & 2 deletions fec/data/api_caller.py
Original file line number Diff line number Diff line change
Expand Up @@ -510,12 +510,12 @@ def _get_sorted_documents(ao):
sorted_documents = sorted(
ao["documents"], key=itemgetter("description", "document_id"), reverse=False
)
sorted_documents = sorted(sorted_documents, key=itemgetter("date"), reverse=True)
sorted_documents = sorted(sorted_documents, key=lambda doc: doc.get("date") or "", reverse=True)

# Sort by document date unless it's a final opinion. Final opinion uses issue date.
sorted_documents = sorted(
sorted_documents,
key=lambda doc: doc.get("date") if doc.get("ao_doc_category_id") != 'F' else ao.get("issue_date"),
key=lambda doc: (ao.get("issue_date") if doc.get("ao_doc_category_id") == 'F' else doc.get("date")) or "",
reverse=True
)

Expand Down
29 changes: 29 additions & 0 deletions fec/data/tests/test_legal_search.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

import datetime
import unittest
from unittest import mock
import io
import logging
Expand All @@ -15,6 +16,34 @@
client = Client()


class TestLegalSearchUtils(unittest.TestCase):
def test_sort_ao_documents_handles_missing_issue_date(self):
ao = {
'issue_date': None,
'documents': [
{
'ao_doc_category_id': 'F',
'date': '2024-01-15',
'description': 'Final Opinion',
'document_id': 2,
},
{
'ao_doc_category_id': 'R',
'date': '2024-02-01',
'description': 'Request',
'document_id': 1,
},
],
}

sorted_documents = api_caller._get_sorted_documents(ao)

self.assertEqual(
[doc['description'] for doc in sorted_documents],
['Request', 'Final Opinion']
)


class TestLegalSearch(TestCase):

# Test1 : OK
Expand Down
2 changes: 1 addition & 1 deletion fec/fec/static/js/legal-search-ao.js
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ LegalSearchAo.prototype.refreshTable = function(response) {
newRow += `
<td class="simple-table__cell">
<div class="t-sans">
${['Pending','Withdrawn'].includes(advisory_opinion.status) ? advisory_opinion.status : new Date(advisory_opinion.issue_date).toLocaleDateString('en-US', { month: '2-digit', day: '2-digit', year: 'numeric' })}
${['Pending','Withdrawn'].includes(advisory_opinion.status) ? advisory_opinion.status : advisory_opinion.issue_date ? new Date(advisory_opinion.issue_date).toLocaleDateString('en-US', { month: '2-digit', day: '2-digit', year: 'numeric' }) : 'Not dated'}
</div>
</td>`;
newRow += `
Expand Down
9 changes: 8 additions & 1 deletion fec/legal/templates/legal-advisory-opinion.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,14 @@
<h2>Documents</h2>
{% if final_opinion %}
<div class="content__section">
<a class="button button--cta button--document button--lg" href="{{ final_opinion.url }}">Final opinion</a> <span class="t-sans u-padding--left">{{ final_opinion.date | date(fmt='%B %d, %Y') }}</span>
<a class="button button--cta button--document button--lg" href="{{ final_opinion.url }}">Final opinion</a>
<span class="t-sans u-padding--left">
{% if advisory_opinion.issue_date %}
{{ advisory_opinion.issue_date | date(fmt='%B %d, %Y') }}
{% else %}
Not dated
{% endif %}
</span>
</div>
{% endif %}
<table class="data-table simple-table" style="table-layout: auto;">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,10 @@
Pending
{% elif advisory_opinion.status == "Withdrawn"%}
Withdrawn
{% elif advisory_opinion.issue_date != undefined %}
{% elif advisory_opinion.issue_date %}
{{ advisory_opinion.issue_date | date(fmt='%m/%d/%Y') }}
{% else %}
Not dated
{% endif %}
</div>
</td>
Expand Down
36 changes: 36 additions & 0 deletions fec/legal/tests/test_legal.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,42 @@ def test_load_legal_mur(self, call_api):
])


class TestAdvisoryOpinionPage(unittest.TestCase):
def setUp(self):
self.factory = RequestFactory()

@mock.patch.object(api_caller, 'load_legal_advisory_opinion')
def test_advisory_opinion_page_handles_missing_issue_date(self, mock_load_ao):
final_opinion = {
'ao_doc_category_id': 'F',
'category': 'Final Opinion',
'date': '2024-01-15',
'description': 'Final Opinion',
'document_id': 2,
'url': '/files/legal/aos/2024-01/final.pdf',
}
mock_load_ao.return_value = {
'no': '2024-01',
'name': 'Test AO',
'summary': 'Test summary',
'issue_date': '',
'documents': [final_opinion],
'sorted_documents': [final_opinion],
'entities': [],
'statutory_citations': [],
'regulatory_citations': [],
'ao_citations': [],
'aos_cited_by': [],
}

request = self.factory.get('/data/legal/advisory-opinions/2024-01/')
response = views.advisory_opinion_page(request, '2024-01')

self.assertEqual(response.status_code, 200)
self.assertIn(b'Final opinion', response.content)
self.assertIn(b'Not dated', response.content)


class TestLegalDocumentRedirect(TestCase):
def setUp(self):
self.factory = RequestFactory()
Expand Down