Working version

This commit is contained in:
koalasat
2025-06-21 18:09:09 +02:00
parent 220b4263b4
commit cda72d11b4
8 changed files with 30 additions and 29 deletions

View File

@ -168,7 +168,7 @@ class OrderViewSchema:
"examples": [ "examples": [
OpenApiExample( OpenApiExample(
"Order cancelled", "Order cancelled",
value={"bad_request": "This order has been cancelled by the maker"}, value={"bad_request": "This order has been cancelled"},
status_codes=[400], status_codes=[400],
), ),
OpenApiExample( OpenApiExample(
@ -178,7 +178,7 @@ class OrderViewSchema:
), ),
OpenApiExample( OpenApiExample(
"Order cancelled", "Order cancelled",
value={"bad_request": "This order has been cancelled collaborativelly"}, value={"bad_request": "This order has been cancelled"},
status_codes=[400], status_codes=[400],
), ),
OpenApiExample( OpenApiExample(

View File

@ -207,6 +207,10 @@ class OrderDetailSerializer(serializers.ModelSerializer):
required=False, required=False,
help_text="True if you are either a taker or maker, False otherwise", help_text="True if you are either a taker or maker, False otherwise",
) )
has_password = serializers.BooleanField(
required=False,
help_text="True if the order is password protected",
)
maker_status = serializers.CharField( maker_status = serializers.CharField(
required=False, required=False,
help_text="Status of the maker:\n" help_text="Status of the maker:\n"
@ -438,6 +442,7 @@ class OrderDetailSerializer(serializers.ModelSerializer):
"is_maker", "is_maker",
"is_taker", "is_taker",
"is_participant", "is_participant",
"has_password",
"maker_status", "maker_status",
"taker_status", "taker_status",
"price_now", "price_now",

View File

@ -258,7 +258,7 @@ class OrderView(viewsets.ViewSet):
data["penalty"] = request.user.robot.penalty_expiration data["penalty"] = request.user.robot.penalty_expiration
# 2.1) If order has a password # 2.1) If order has a password
if not data["is_participant"] and order.password is not None: if not data["is_participant"] and data["has_password"]:
return Response(data, status.HTTP_200_OK) return Response(data, status.HTTP_200_OK)
# 3.a) If not a participant and order is not public, forbid. # 3.a) If not a participant and order is not public, forbid.

View File

@ -405,7 +405,7 @@ paths:
examples: examples:
OrderCancelled: OrderCancelled:
value: value:
bad_request: This order has been cancelled collaborativelly bad_request: This order has been cancelled
summary: Order cancelled summary: Order cancelled
WhenTheOrderIsNotPublicAndYouNeitherTheTakerNorMaker: WhenTheOrderIsNotPublicAndYouNeitherTheTakerNorMaker:
value: value:
@ -1444,6 +1444,9 @@ components:
is_participant: is_participant:
type: boolean type: boolean
description: True if you are either a taker or maker, False otherwise description: True if you are either a taker or maker, False otherwise
has_password:
type: boolean
description: True if the order is password protected
maker_status: maker_status:
type: string type: string
description: |- description: |-

View File

@ -119,7 +119,7 @@ const OrderPage = (): React.JSX.Element => {
}); });
}} }}
/> />
{!currentOrder?.maker_hash_id && !currentOrder?.bad_request && <CircularProgress />} {!currentOrder?.maker && !currentOrder?.bad_request && <CircularProgress />}
{currentOrder?.bad_request && currentOrder.status !== 5 ? ( {currentOrder?.bad_request && currentOrder.status !== 5 ? (
<> <>
<Typography align='center' variant='subtitle2' color='secondary'> <Typography align='center' variant='subtitle2' color='secondary'>
@ -141,7 +141,7 @@ const OrderPage = (): React.JSX.Element => {
)} )}
</> </>
) : null} ) : null}
{currentOrder?.maker_hash_id && (!currentOrder.bad_request || currentOrder.status === 5) ? ( {currentOrder?.maker && (!currentOrder.bad_request || currentOrder.status === 5) ? (
currentOrder.is_participant ? ( currentOrder.is_participant ? (
windowSize.width > doublePageWidth ? ( windowSize.width > doublePageWidth ? (
// DOUBLE PAPER VIEW // DOUBLE PAPER VIEW

View File

@ -301,9 +301,9 @@ const OrderDetails = ({
</ListItem> </ListItem>
)} )}
<Divider /> {!currentOrder.bad_request && currentOrder.maker_hash_id && (
{!currentOrder.bad_request && (
<> <>
<Divider />
<ListItem> <ListItem>
<ListItemAvatar sx={{ width: '4em', height: '4em' }}> <ListItemAvatar sx={{ width: '4em', height: '4em' }}>
<RobotAvatar <RobotAvatar
@ -323,7 +323,6 @@ const OrderDetails = ({
secondary={t('Order maker')} secondary={t('Order maker')}
/> />
</ListItem> </ListItem>
<Collapse in={currentOrder?.is_participant && currentOrder?.taker_nick !== 'None'}> <Collapse in={currentOrder?.is_participant && currentOrder?.taker_nick !== 'None'}>
<Divider /> <Divider />
<ListItem> <ListItem>
@ -539,7 +538,7 @@ const OrderDetails = ({
{/* If the user has a penalty/limit */} {/* If the user has a penalty/limit */}
{currentOrder?.penalty !== undefined ? ( {currentOrder?.penalty !== undefined ? (
<Grid item style={{ width: '100%' }}> <Grid sx={{ marginBottom: 1, width: '100%', padding: '0 16px' }}>
<Alert severity='warning' sx={{ borderRadius: '0' }}> <Alert severity='warning' sx={{ borderRadius: '0' }}>
<Countdown <Countdown
date={new Date(currentOrder?.penalty ?? '')} date={new Date(currentOrder?.penalty ?? '')}
@ -551,8 +550,8 @@ const OrderDetails = ({
<></> <></>
)} )}
{currentOrder.bad_request?.includes('password') && ( {!currentOrder?.is_participant && currentOrder?.has_password && (
<Grid item style={{ width: '100%', padding: '16px' }}> <Grid item style={{ width: '100%', padding: '0 16px' }}>
<TextField <TextField
fullWidth fullWidth
label={`${t('Password')}`} label={`${t('Password')}`}
@ -571,7 +570,7 @@ const OrderDetails = ({
</Grid> </Grid>
)} )}
{!currentOrder?.is_participant || currentOrder.bad_request?.includes('password') ? ( {!currentOrder?.is_participant ? (
<Grid item style={{ width: '100%', padding: '8px' }}> <Grid item style={{ width: '100%', padding: '8px' }}>
<TakeButton <TakeButton
password={password} password={password}

View File

@ -78,6 +78,7 @@ class Order {
is_maker: boolean = false; is_maker: boolean = false;
is_taker: boolean = false; is_taker: boolean = false;
is_participant: boolean = false; is_participant: boolean = false;
has_password: boolean = false;
maker_status: 'Active' | 'Seen recently' | 'Inactive' = 'Active'; maker_status: 'Active' | 'Seen recently' | 'Inactive' = 'Active';
taker_status: 'Active' | 'Seen recently' | 'Inactive' = 'Active'; taker_status: 'Active' | 'Seen recently' | 'Inactive' = 'Active';
price_now: number | undefined = undefined; price_now: number | undefined = undefined;

View File

@ -506,8 +506,9 @@ class TradeTest(BaseAPITestCase):
# External user GET # External user GET
trade.get_order(trade.taker_index) trade.get_order(trade.taker_index)
data = trade.response.json() data = trade.response.json()
self.assertEqual(trade.response.status_code, 403) self.assertEqual(trade.response.status_code, 200)
self.assertEqual(data["bad_request"], "This order is password protected") self.assertTrue(data["has_password"])
self.assertNotIn("maker_nick", data)
# Take with no password # Take with no password
trade.take_order() trade.take_order()
@ -1072,9 +1073,7 @@ class TradeTest(BaseAPITestCase):
self.assertEqual(trade.response.status_code, 400) self.assertEqual(trade.response.status_code, 400)
self.assertResponse(trade.response) self.assertResponse(trade.response)
self.assertEqual( self.assertEqual(data["bad_request"], "This order has been cancelled")
data["bad_request"], "This order has been cancelled by the maker"
)
maker_headers = trade.get_robot_auth(trade.maker_index) maker_headers = trade.get_robot_auth(trade.maker_index)
maker_nick = read_file(f"tests/robots/{trade.maker_index}/nickname") maker_nick = read_file(f"tests/robots/{trade.maker_index}/nickname")
@ -1182,21 +1181,15 @@ class TradeTest(BaseAPITestCase):
trade.cancel_order(trade.maker_index) trade.cancel_order(trade.maker_index)
data = trade.response.json() data = trade.response.json()
self.assertEqual( self.assertEqual(data["bad_request"], "This order has been cancelled")
data["bad_request"], "This order has been cancelled by the maker"
)
trade.get_order(trade.taker_index) trade.get_order(trade.taker_index)
data = trade.response.json() data = trade.response.json()
self.assertEqual( self.assertEqual(data["bad_request"], "This order has been cancelled")
data["bad_request"], "This order has been cancelled by the maker"
)
trade.get_order(trade.third_index) trade.get_order(trade.third_index)
data = trade.response.json() data = trade.response.json()
self.assertEqual( self.assertEqual(data["bad_request"], "This order has been cancelled")
data["bad_request"], "This order has been cancelled by the maker"
)
def test_cancel_order_cancel_status(self): def test_cancel_order_cancel_status(self):
""" """
@ -1219,7 +1212,7 @@ class TradeTest(BaseAPITestCase):
self.assertEqual( self.assertEqual(
trade.response.json()["bad_request"], trade.response.json()["bad_request"],
"This order has been cancelled by the maker", "This order has been cancelled",
) )
def test_cancel_order_different_cancel_status(self): def test_cancel_order_different_cancel_status(self):
@ -1281,7 +1274,7 @@ class TradeTest(BaseAPITestCase):
self.assertResponse(trade.response) self.assertResponse(trade.response)
self.assertEqual( self.assertEqual(
trade.response.json()["bad_request"], trade.response.json()["bad_request"],
"This order has been cancelled collaborativelly", "This order has been cancelled",
) )
maker_headers = trade.get_robot_auth(trade.maker_index) maker_headers = trade.get_robot_auth(trade.maker_index)